javascript调用匿名函数的多种方式
目前,以下多种方式中,只能理解第一种和第二种,其他都不明白是什么个原理,功力尚浅,还需努力,各位大神能不能解释下?
方式1,调用函数,得到返回值。强制运算符使函数调用执行
(function(x,y){
alert(x+y);
return x+y;
}(3,4));
方式2,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行
(function(x,y){
alert(x+y);
return x+y;
})(3,4);
方式3,使用void
void function(x) {
x = x-1;
alert(x);
}(9);
方式4,使用-/+运算符
-function(x,y){
alert(x+y);
return x+y;
}(3,4);
+function(x,y){
alert(x+y);
return x+y;
}(3,4);
--function(x,y){
alert(x+y);
return x+y;
}(3,4);
++function(x,y){
alert(x+y);
return x+y;
}(3,4);
方式5,使用波浪符(~)
~function(x, y) {
alert(x+y);
return x+y;
}(3, 4);
方式6,匿名函数执行放在中括号内
[function(){
console.log(this) // 浏览器得控制台输出window
}(this)]
方式7,匿名函数前加typeof
typeof function(){
console.log(this) // 浏览器得控制台输出window
}(this)
方式8,匿名函数前加delete
delete function(){
console.log(this) // 浏览器得控制台输出window
}(this)
方式9,匿名函数前加void
void function(){
console.log(this) // 浏览器得控制台输出window
}(this)
方式10,使用new方式,传参
new function(win){
console.log(win) // window
}(this)
方式11,使用new,不传参
new function(){
console.log(this) // 这里的this就不是window了
}
方式12,逗号运算符
1, function(){
console.log(this) // window
}();
方式13,按位异或运算符
1^function(){
console.log(this) // window
}();
方式14,比较运算符
1>function(){
console.log(this) // window
}();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
你搞清楚前两种方法很好。@iSayme的回答很好。
但是千万不要使用前两种方法以外的方法,因为它们让代码的可读性很差、难以维护。写出这样的代码好像是在炫耀自己知道这样的技巧而已,在实际运用中极不推荐使用。(除非你以后只做个人项目,那就想怎么写就怎么写了。)
感谢@nightire的评论,题主所提出的第9种实践:
的确也是值得推崇的方式之一。
上面所有的一切(包括方法1和2)都是为了将
函数声明
转成函数表达式
. 即所有方法的目的
都是一样的, 只是实现方式不同
.另, 坐等更加严谨的回答~
都是一样的 在前面加上+之类的也是把函数转换为表达式 然后()执行
好吧 没想到下面还有这么多种 new 就是直接执行构造函数 其他的应该和(functions(){})()差不多 具体的就等大神来一一回答了
这么多种,比较害人。程序实现其功能最重要,不需要那么花哨。反观许多插件,也会使用一些花哨的表达方式,确实不太利于理解
前两种都不是很理解,,楼主 能不能讲解下?谢谢了