gpt4 book ai didi

Javascript 闭包语法

转载 作者:数据小太阳 更新时间:2023-10-29 04:30:19 26 4
gpt4 key购买 nike

这些构造之间有什么区别、优点/缺点(如果有的话)?

 new function(obj) {
console.log(obj);
}(extObj);

对比

 (function(obj) {
console.log(obj);
})(extObj);

最佳答案

第一个返回对匿名构造函数的新构造实例的引用 (= this)。

第二个返回匿名函数的返回值。由于您的函数没有 return 语句,它将隐式返回 undefined。

尝试以下操作:

var t1 = new function(obj) { console.log(obj); }(extObj);
var t2 = (function(obj) { console.log(obj); })(extObj);

typeof t1 => "object"
typeof t2 => "undefined"

(顺便说一句,t1.constructor 将返回您使用 t1 创建的原始函数。)

如果添加 return 语句,区别会变得更加明显:

var t1 = new function(obj){ return(obj); }("foo");
var t2 = (function(obj){ return(obj); })("bar");

console.log(t1) => "object"
console.log(t2) => "bar"

IMO,这使得 (function)() 对于日常用例更有用 - 您将执行此函数的返回值分配给变量,如果您需要,该变量通常是您想要的正在使用立即调用的函数。特别是当有更复杂的东西时(伪代码):

var myNameSpace = (function(){
/* do some private stuff here*/
...
/* expose parts of your anonymous function by returning them */
return{
functionX,
variable1,
variable2
}
}();

基本上,您可以使用任意一元运算符将函数声明转换为立即调用的表达式。所以你也可以这样写:

!function(){ /* code */ }();
~function(){ /* code */ }();
-function(){ /* code */ }();
+function(){ /* code */ }();

根据您的函数的返回语句,这些将给出不同的返回结果。 ! - 对返回值求反返回值。

关于Javascript 闭包语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897423/

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