gpt4 book ai didi

javascript - 了解 javascript 函数、作用域和闭包

转载 作者:行者123 更新时间:2023-11-29 10:48:29 25 4
gpt4 key购买 nike

有人可以详细解释这段 js 的作用吗?

(function (window) {
var test = window['test'] = {};
test.utils = new(function(){ ... })();
})(window);

我知道该函数不是全局范围的。我知道它正在创建一个名为 test 的变量,该变量指向 window 对象中的一个属性,该对象是一个空对象。我也明白 utils 是测试的一个属性。

我不明白最后一部分的目的是什么 (window); 或者为什么 utils 函数被指定为 new.

请解释。

最佳答案

它创建一个函数并立即调用它,传入 window。该函数接收一个名为 window 的参数,然后在其上创建一个空对象,该对象既可作为 window 上名为 test 的属性,也可作为名为 test 的局部变量。然后它通过 new 调用函数创建一个对象,并将该对象分配给 test.utils

I don't understand what the purpose of the last part is (window);...

它在您引用的代码中并没有真正起到任何作用,因为传递到主(外部)函数 window 的符号与接收参数的名称相同它。如果他们的名字不同,那么它会起到一定的作用,例如:

(function(wnd) {
})(window);

这将使 window 在函数中作为 wnd 可用。

or why the utils function is being designated as new.

utils 不会是一个函数(至少,除非您用 ... 替换的代码正在做一些真正 奇怪),它将是一个通过调用该函数创建的对象。

整个事情可以更清楚地重写:

(function(window) {

var test;

test = {};
window['test'] = test;

test.utils = new NiftyThing();

function NiftyThing() {
}

})(window);

那仍然无缘无故地做 window 的事情,但希望它能清楚地说明 new(function() { ... })(); 位正在做。

关于javascript - 了解 javascript 函数、作用域和闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14754064/

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