函数() { return false; } 的操作细节().
Detail of operation of !function() { return false; } ()
!function() { return false; } ()
我知道你为什么会写这样的东西,但我有一个关于它工作方式的问题。 据我了解,感叹号有两件事:
- 它作用于
function() { return false; }
,将其更改为表达式 - 它还作用于执行函数的结果,因此整行的计算结果为
true
所以我的问题是:
- 这是正确的解释吗?
- 如果它是正确的,那么既然
()
比!
绑定得更紧密,那么第一部分(函数本身变成表达式)是如何发生的? 为什么感叹号不在整个行上起作用?
根据运算符优先级,function
声明(这是new Function
的简写)将首先发生,函数调用()
将其次发生,否定!
将最后发生。
为清楚起见,编辑:您可以按此方式重写这一行以完成相同的操作:
// declare an anonymous function and assign it to the myFunc variable
var myFunc = function () {
return false;
};
// execute the function and store it's return value (false) in returnValue
var returnValue = myFunc();
// negate the return value (true)
var output = !returnValue;
1)它不会"改变"它。当解析器通过"函数"位时,它期望一个表达式,因此"函数"被解析为(可能是匿名的)函数表达式的一部分,而不是作为函数语句。
2)它作用于整条线。如果你看一下优先级,正如 jbabey 所建议的那样,你会看到函数调用比否定运算符绑定得更紧密,所以整个 like 被计算为
! ((function(){})());
或者在类似的,也许更具可读性的版本中:
var f = function(){ ... };
! (f());
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何确定javascript已经完成了某些操作.ios上的
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 从JavaScript访问struts操作中的属性
- fluxxor向一个flux实例添加一组以上的操作
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 操作放置在画布上的元素之间的连接
- 使用“+="操作人员
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- Jquery未定义函数正在停止其他操作
- 如何操作iframe之外的元素
- javascript对象操作:根据指定条件选择属性
- jQuery:暂停按钮可以暂停所有其他操作
- 用于选择/文本框操作的JavaScript
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 通过javascript操作图像,非常简单
- 如何在master中调用细节网格作为单击事件
- 将文本框中的值用于按钮窗体操作上的变量
- 函数() { return false; } 的操作细节().