我见过:
!function(){ //code }();
Run Code Online (Sandbox Code Playgroud)
用于几个地方立即执行匿名功能.通常,它用于代替:
(function(){ //code }())
Run Code Online (Sandbox Code Playgroud)
有谁知道!
实际上如何执行该功能?
小智 39
什么了!不
使用时!
,该函数将成为一元(逻辑)NOT运算符的单个操作数.
这会强制将函数作为表达式进行求值,从而允许立即内联调用它.
其他选择
几乎任何操作员都可以这样做.这里有些例子...
'invoke',function(){ /*code*/ }();
1+function(){ /*code*/ }();
void function(){ /*code*/ }();
~function(){ /*code*/ }();
+function(){ /*code*/ }();
Run Code Online (Sandbox Code Playgroud)
关于其中一些的好处是运算符的含义不会过载.
这个问题 ()
当你()
在函数周围使用时,你可以遇到一些错误,如果你连续多个没有用分号分隔它们就会突然出现.
(function() {
alert('first');
}())
(function() {
alert('second');
}())
// TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)
这将导致a TypeError
,因为()
第二个函数周围的外部对将被解释为打算调用函数.第一个当然没有返回功能,所以你试着打电话undefined
.
如何使用不同的操作员来处理(或避免)问题
即使像+
某种程度过载的操作员也不会导致错误.
如果你这样做......
+function() {
alert('first');
}()
+function() {
alert('second');
}()
Run Code Online (Sandbox Code Playgroud)
第一个+
被解释为一元+运算符,它转换从第一个函数返回的结果,在这种情况下undefined
它被转换为NaN
.
第二个+
将被解释为加法运算符,因此将尝试添加NaN
第二个函数的返回结果,这也是第二个函数的返回结果undefined
.
结果当然是NaN
,但它是无害的.抛出错误没有非法代码.
演示操作员如何与功能交互
为了证明这一点,只需给每个函数一个返回值,然后将其粘贴到控制台中......
+function() {
alert('first');
return "10";
}()
+function() {
alert('second');
return 20;
}()
// 30
Run Code Online (Sandbox Code Playgroud)
您将获得两个alert
,然后控制台将显示,30
因为第一个+
运算符将String "10"
转换为Number 10
,第二个+
将两个结果一起添加.
归档时间: |
|
查看次数: |
1576 次 |
最近记录: |