gpt4 book ai didi

Javascript 立即函数和代码范围

转载 作者:行者123 更新时间:2023-11-28 13:05:28 25 4
gpt4 key购买 nike

在比较普通函数和立即函数时,我对范围感到困惑。这是一个例子:

var num=5;
var x=3;
doubleNum = function(){
num = num*x
x++;
return num;
};
console.log(doubleNum());//15
console.log(doubleNum());//60
console.log(doubleNum());//300

这是一个普通函数,num 和 x 是全局定义的,可以通过 doubleNum 访问,因此 num 和 x 会更新。

var num=5;
var x=3;
doubleNum = function(){
num = num*x
x++;
return num;
}();
console.log(doubleNum);//15
console.log(doubleNum);//15
console.log(doubleNum);//15

但是,如果我定义一个立即函数并以与上面相同的方式调用它,我会得到不同的答案。即使我期望有相同的输出我错过了一些重要的事情吗?还是我对某些概念理解错误?请帮忙。提前致谢。 Jsfiddle

最佳答案

因为你的doubleNum不是函数的引用,而是保留匿名函数调用的结果。

在第一种情况下,您分配给 doubleNum 一个函数,每次通过 doubleNum() 调用它时,您都会更改其中超出范围的变量并返回一个 数字。您执行此操作 3 次。你的代码相当于类似

var num=5;
var x=3;

doubleNum = function(){
num = num*x; // Every call will affect the outscoped num
x++; // Every call will affect the outscoped x
return num;
};

var val = doubleNum(); // Call changes the values and returs a new result
console.log(val);

val = doubleNum(); // Call changes the values and returs a new result
console.log(val);

val = doubleNum(); // Call changes the values and returs a new result
console.log(val);

在第二种情况下,您将单次调用匿名函数的结果分配给doubleNum。该函数值已计算一次并将结果分配给 doubleNum。你的代码相当于

var num=5;
var x=3;
var doubleNum;

var myFunction = function(){
num = num*x;
x++;
return num;
};

doubleNum = myFunction(); // Only one call

console.log(doubleNum);
console.log(doubleNum);
console.log(doubleNum);

关于Javascript 立即函数和代码范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46804531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com