先看下下面几种写法
1.function f(x){return x*x;};f(x);
2.(function(x){return x*x;})(x);
3.(function(x){return x*x;}(x));
第一种我们应该都很熟悉了,这是我们经常使用的写法。第二第三种都是匿名函数的写法。
--------------------------------------------------------------------------------
第二种
可以这样理解:
•var f=function(x) {return x*x;};f()
那我们不通过f这个变量来引用函数就是
•function(){}()
然而这样肯定是错误的就像
•var f=1+2;
•f=f*0;
与
•var f=1+2*0;
结果不同一样。
要得到正确结果只能:
•f=(1+2)*0;
也就是要明确的标识出程序块,即:
•(function(){})()
肯你有疑问:括号“()”到底是不是起到了标识代码块的作用?
我们可以用JavaScript的内置函数检测一下!
举一个最简单的例子:
•alert(4)
这段代码会弹出提示内容是“4”
改成这样
•(alert)(4)
可以看到执行的效果和上一段代码一样。
这种形式的函数执行也被很多JavaScript框架所采用。
--------------------------------------------------------------------------------
第三种,如果你用过jsvm框架的话就会发现里面的代码使用了这种形式。
那如何解释第三种情况呢?
为了弄明白浏览器是如何理解这样的写法的,我们可以利用一下Mozilla Firefox的错误控制台功能。
在代码中插入一段错误代码,代码段如下:
•(function(s){s+s}(1)).splice();
打开Mozilla Firefox的错误控制台,可以看到有如下的错误提示
错误: (function (s) {})(1) has no properties
源文件:file:///C:/Documents…….html
行:18
可以认为,浏览器对于
•(function(s){s+s}(1))
这样的代码按照
•(function (s) {s+s})(1)
来解析的。
JavaScript中匿名函数,函数直接量和闭包(转)
原创JavaAlpha ©著作权
文章标签 javascript function mozilla firefox properties 文章分类 虚拟化 云计算
©著作权归作者所有:来自51CTO博客作者JavaAlpha的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【JavaScript】——匿名函数和闭包
前提 通过最近一段时间对JavaScript视频的学习,接触到一
匿名函数 作用域 局部变量 -
js 闭包和匿名函数
前面学
匿名函数 局部变量 作用域 -
浅谈匿名函数和闭包
浅谈匿名函数和闭包
职场 休闲 浅谈匿名函数和闭包 -
JavaScript的深空——匿名函数和闭包
所谓匿名函数指的就是没有名称的函数。使用函数声明时,必须给它指定名称;但使用函数表达式定义 函数时,不必给
闭包 closure html 作用域 函数表达式 -
jquery 匿名函数 闭包 javascript中的匿名函数
函数定义函数定义分为三种
匿名函数 块级作用域 作用域 -
深入理解K近邻(KNN)算法原理
其计算效率和维度灾难问题。
#算法 #机器学习 #人工智能 #分类 #k近邻算法
















