gpt4 book ai didi

javascript - 自调用函数未定义

转载 作者:搜寻专家 更新时间:2023-11-01 04:52:40 24 4
gpt4 key购买 nike

如果我声明一个函数字面量:

var x = function(){
alert('hi');
};
console.log(x); // returns the function code.

但是:

var x = (function(){
alert('hi');
})();

console.log(x); // returns undefined?

我不明白为什么会这样。将函数编写为文字的目的不就是仍然能够通过其变量引用名称访问它吗?我知道这可能很愚蠢,但我只是在学习 javascript,所以不要太苛刻地判断。

最佳答案

您的函数不返回任何内容,因此它的返回值为undefined

一个自执行函数被执行并且函数没有存储在任何地方——只有它的返回值(以及函数设置/修改的任何外部变量)存在。

例如,此代码等同于 var x = 'hi';:

var x = (function(){
return 'hi';
})();

自调用函数的目的通常是创建一个新的作用域,例如在循环中创建回调函数时:

for(var i = 0; i < 5; i++) {
window.setTimeout(function(){ alert('i = ' + i); }, 1000 * i);
}

这将在所有回调中使用相同的 i,因此它会提醒 i = 5 5 次。

for(var i = 0; i < 5; i++) {
(function(i) {
window.setTimeout(function(){ alert('i = ' + i); }, 1000 * i);
})(i);
}

通过使用自执行函数,我们创建了一个新的范围,因此在每个循环中创建了一个新的 i

自执行函数的另一个用途是创建一个新的范围,确保某些变量可用并设置为正确的值:

(function($, window, undefined) {
// here the following always applies:
// $ === jQuery
// window === the global object [assuming the function was executed in the global scope]
// undefined is well, undefined - in some js engines someone could have redefined it
})(jQuery, this);

关于javascript - 自调用函数未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818472/

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