JavaScript-(function(){alert(“hello”);})(); 和(function(){alert(“hello”);}).call(this); 区别?

JavaScript-(function(){alert(“hello”);})(); 和(function(){alert(“hello”);}).call(this); 区别?

虐人心 发布于 2017-07-22 字数 96 浏览 1079 回复 2
a = (function(){
alert("asdf");
})();

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-07-25 2 楼

 a = (function(){
alert("asdf");
})();

这种后面加括号是指当定义完这个函数时直接运行。

 a = (function(){
alert("hello");}).call(this);

而call(this)方法,是指当定义完后将this本身通过call()调用本身来实现立即执行。

所以我认为两个是一样的,都是在window作用域下执行,至于底层的实现就不太清楚了

甜柠檬 2017-07-24 1 楼

没什么区别,都是js中匿名函数的不同调用方式。
(function(){alert("hello");})();
(function(){alert("hello");}());
!function(){alert("hello");}();
这三种都可以,安全性的话,第二种写法比较安全一点,具体如下:
匿名函数上面的写法都存在前后文;问题,所以需要注意的是匿名函数在压缩工具打包压缩后会出现上下文错误合并()的问题,例如第一种写法,如果下面的代码,未压缩之前是正常的,压缩后就不正常了,如下例:

var a = function(){}

(function(){
alert("hello");
})();
上例中就出现了错误,这就是因为a函数会把他后面的匿名函数作为参数传入a中,这也就解释了为什么有人习惯在匿名函数之前添加;了,就是为了防止上文没有严格遵循javascript语法,漏掉;的问题。
想要了解更多,请搜索javascript 匿名函数。