Home Web Front-end JS Tutorial How to modify variables outside the scope in JavaScript_javascript tips

How to modify variables outside the scope in JavaScript_javascript tips

May 16, 2016 pm 03:08 PM

1. I did the after-school exercises while reading the JavaScript study guide today, and therefore conducted a detailed and in-depth study of the parameters passed in the function.

The topic is as follows:

How can a function modify variables outside its scope? Write a function that takes an array of numbers from 1 to 5 as a parameter. After calling the function, the number items will be replaced with the corresponding string representation.

Need to pay attention to the knowledge points:

In the transfer of function parameters in JavaScript, for value transfer of parameters based on original values ​​(numbers, strings, Boolean values), modifications in the function will not affect the actual parameter values. As for the parameters passed to the function, The object is a reference, and modifications to it will be reflected in the calling program.<-However, there will be situations, as follows

var outer_number = ;
var outer_boolean = true;
var outer_array = [,,];
var outer_object = {test:""};
function display(num,bool,arr,obj){
console.log("number:"+num+"\nboolean:"+bool+"\narray:"+arr+"\nobject:"+obj.test);
}
function test(num,bool,arr,obj){
display(num,bool,arr,obj);//num=,bool=true,array=[,,],object.test=
num = ;
bool = false;
arr[] = ;
obj.test = "";
display(num,bool,arr,obj);//num=,bool=false,array=[,,,],object.test=
arr = [,,];
obj = {test:""};
display(num,bool,arr,obj);//num=,bool=false,array=[,,],object.test=
}
test(outer_number,outer_boolean,outer_array,outer_object);
display(outer_number,outer_boolean,outer_array,outer_object);//num = ,bool=true,array=[,,,],object.test= 
Copy after login

In the above code we created 4 global variables, the types are numbers, Boolean values, arrays, objects. 2 functions, display and test.

display was executed 4 times, and the results are as follows:

"number:2
boolean:true
array:1,2,3
object:122"<-The value when passed into the function

"number:0
boolean:false
array:1,2,3,3
object:134"<-Perform changes

"number:0
boolean:false
array:3,2,1
object:133"<-Reassign

"number:2
boolean:true
array:1,2,3,3
object:134"<-After the function is executed

It can be seen that our reassignment of arrays and objects was not successful. If passed by reference, then we should also reassign and modify the arrays and objects of global variables.
In fact, the so-called assignment by reference in JavaScript is not copying by reference in the true sense. To be precise, it should be passed by sharing. It can also be called passing by object or call by sharing.

Under this condition of passing by sharing, the reference we obtain can be said to be only a copy of the actual parameter reference. The biggest difference between it and the passing by reference we often say is that our assignment to the reference copy will not affect the actual parameter. The value of the parameter, as we did above, the assignment operation is not feasible.

Of course, we look at both object types and basic types. Objects are mutable and basic types are immutable (note! String modification is actually a new string returned), so passing by sharing is for basic types. It is also consistent with delivery by sharing.

To summarize:

In JavaScript, both basic types and objects are called by sharing. However, due to the immutability of JavaScript’s basic types, there is no difference between passing basic types by sharing and passing by value, while objects are passed by sharing.

Call by sharing: What is passed is a copy of the actual parameter reference. Our assignment to the reference copy does not affect the value of the actual parameter, but the reference copy can be used to modify the referenced content. Detailed wiki address

Function parameters passed in:

1. Basic types, passed by value (or passed by sharing), internal assignment modifications will not affect the calling program

2. The object type is passed by sharing. What is passed in is a copy of the actual parameter reference. The internal assignment to the reference is invalid, and the assignment modification to the object attribute is valid.

That’s probably how I understand it. If I make any mistakes somewhere, I hope they can be pointed out.

Pull out the JavaScript scope separately below

Any programming language has the concept of scope. Simply put, scope is the accessible range of variables and functions, that is, scope controls the visibility and life cycle of variables and functions. In JavaScript, there are two types of variable scope: global scope and local scope.

  Global Scope

Objects that can be accessed anywhere in the code have global scope. Generally speaking, the following situations have global scope:

(1) The outermost function and variables defined outside the outermost function have global scope, for example:

var authorName="山边小溪";
function doSomething(){
var blogName="梦想天空";
function innerSay(){
alert(blogName);
}
innerSay();
}
alert(authorName); //山边小溪
alert(blogName); //脚本错误
doSomething(); //梦想天空
innerSay() //脚本错误
Copy after login

(2) All undefined and directly assigned variables are automatically declared to have global scope, for example:

function doSomething(){
var authorName="山边小溪";
blogName="梦想天空";
alert(authorName);
}
doSomething(); //山边小溪
alert(blogName); //梦想天空
alert(authorName); //脚本错误 
Copy after login

  变量blogName拥有全局作用域,而authorName在函数外部无法访问到。

  (3)所有window对象的属性拥有全局作用域

  一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location、window.top等等。

  1. 局部作用域(Local Scope)  

  和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域,例如下列代码中的blogName和函数innerSay都只拥有局部作用域。

function doSomething(){
var blogName="梦想天空";
function innerSay(){
alert(blogName);
}
innerSay();
}
alert(blogName); //脚本错误
innerSay(); //脚本错误 
Copy after login

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1653
14
PHP Tutorial
1251
29
C# Tutorial
1224
24
What should I do if I encounter garbled code printing for front-end thermal paper receipts? What should I do if I encounter garbled code printing for front-end thermal paper receipts? Apr 04, 2025 pm 02:42 PM

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

Demystifying JavaScript: What It Does and Why It Matters Demystifying JavaScript: What It Does and Why It Matters Apr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

Who gets paid more Python or JavaScript? Who gets paid more Python or JavaScript? Apr 04, 2025 am 12:09 AM

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

How to achieve parallax scrolling and element animation effects, like Shiseido's official website?
or:
How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? How to achieve parallax scrolling and element animation effects, like Shiseido's official website? or: How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? Apr 04, 2025 pm 05:36 PM

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

Is JavaScript hard to learn? Is JavaScript hard to learn? Apr 03, 2025 am 12:20 AM

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

The Evolution of JavaScript: Current Trends and Future Prospects The Evolution of JavaScript: Current Trends and Future Prospects Apr 10, 2025 am 09:33 AM

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

How to merge array elements with the same ID into one object using JavaScript? How to merge array elements with the same ID into one object using JavaScript? Apr 04, 2025 pm 05:09 PM

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

How to implement panel drag and drop adjustment function similar to VSCode in front-end development? How to implement panel drag and drop adjustment function similar to VSCode in front-end development? Apr 04, 2025 pm 02:06 PM

Explore the implementation of panel drag and drop adjustment function similar to VSCode in the front-end. In front-end development, how to implement VSCode similar to VSCode...

See all articles