Javascript 函数表达式中的变量范围
我最近一直在学习JavaScript的一些基础知识,并花了相当长的时间分解一些函数表达式以更好地理解它们。我仍然有点不确定在这几个例子中到底发生了什么,如果我错了,我希望得到一些解释,或者至少确认我的思路是否正确 共有三段代码,它们之间略有不同:Javascript 函数表达式中的变量范围,javascript,function,Javascript,Function,我最近一直在学习JavaScript的一些基础知识,并花了相当长的时间分解一些函数表达式以更好地理解它们。我仍然有点不确定在这几个例子中到底发生了什么,如果我错了,我希望得到一些解释,或者至少确认我的思路是否正确 共有三段代码,它们之间略有不同: var my_number = 7; var timesTwo = function(number) { my_number = number * 2; console.log("inside " + my_number); };
var my_number = 7;
var timesTwo = function(number) {
my_number = number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
我好奇的是到底发生了什么事情让他们像他们一样工作
第一种情况似乎相对简单-my_number
以全局开头,number
是函数的局部,而my_number
在函数内部发生了更改,因此在全局框架中为10
第二种情况似乎也很清楚-它与第一种情况类似,只是在赋值为10的函数内部有一个新的局部变量my_number
,而在函数外部my_number
仍然是7
我不确定的是第三件。我假设,由于所有提到的number
现在都是my_number
,因此该函数将在以下行中创建一个新的my_number
变量:
var timesTwo = function(my_number)
即使函数体中没有var my_number
var my_number = 7;
var timesTwo = function(number) {
my_number = number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
第一个示例在全局范围内声明my_number
,并将其值设置为7
timesTwo
是一个函数,它在其参数中接受一个参数,然后在函数中被引用为number
。调用该函数时,将在全局范围中定义的my_number
变量设置为等于传入参数乘以2。“内部”和“外部”调用都记录了相同的结果
在第二个示例中,您正在times2
函数中声明一个局部范围的my_number
。因此,您在“内部”和“外部”调用中记录了不同的my_number
变量
在第三个示例中,times2
接受一个参数,并使用变量my_number
跟踪它。这称为
在函数定义中,指定将新局部变量引入函数范围的my_number
参数
这将对外部的my_number进行阴影处理,因此函数体中对my_number的任何引用都将引用传入参数,而不是外部my_number变量。这是正确的,这个问题基本上可以取消询问=)所有函数参数都是函数范围内的变量
var timesTwo = function(my_number)
var my_number = 7;
var timesTwo = function(number) {
my_number = number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
var my_number = 7;
var timesTwo = function(number) {
var my_number = number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);
var my_number = 7;
var timesTwo = function(my_number) {
my_number = my_number * 2;
console.log("inside " + my_number);
};
timesTwo(5);
console.log("outside " + my_number);