javascript (function())() 请问和一般的function()有啥不同?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript (function())() 请问和一般的function()有啥不同?相关的知识,希望对你有一定的参考价值。
前者是定义并调用这个function后者只是定义了一个function并没调用
按照作用域来看
前者只是一个局部的function不打算在别的地方调用
后者则要根据具体位置来判断 参考技术A 前者的写法 是 jquery 中 当页面加载完毕后所执行的函数,相当于 body中的onload事件
后者是javascript中的函数体,也相当于java中的一个方法~ 参考技术B 传说中的匿名函数,只在创建的时候调用,其他地方无法再调用 参考技术C 我看怎么就没区别呢,写funcation又没名字,这别的地方怎么调用呢
JavaScript !function() [重复]
【中文标题】JavaScript !function() [重复]【英文标题】:JavaScript !function() [duplicate]JavaScript !function() [重复] 【发布时间】:2014-03-01 08:31:12 【问题描述】:在查看缩小的 Sizzle 代码时,我注意到它的开头是这样的:
!function(a)//...
(window)
为什么开头有感叹号?
我认为!
是not
运算符。
谢谢。
编辑:
Full Code.
【问题讨论】:
它是 NOT 运算符。介意显示整个代码吗?我猜这不是函数声明,而是 IIFE... 你确定不是!function()...return bool;()
@p.s.w.g: 它不应该返回布尔值
猜这应该是伪代码,但true
或false
会做得更好,是的。
对于上下文,代码是on github。如果您了解缩小的作用,那么我不会质疑看似晦涩的语法。
【参考方案1】:
!function(a)/* ... */();
使用一元运算符调用 IIFE 是常见的做法。这是一个常见的简写形式:
(function(a)/* ... */());
或:
(function(a)/* ... */)();
您也可以将非一元运算符替换为任何其他一元运算符:
-function(a) /* ... */ ();
+function(a) /* ... */ ();
/* ... etc. */
【讨论】:
你的意思是!function() ()
做!function()
不会调用它
@remyabel 闭包通常没有,当用作 IIFE 时几乎没有。实际上,(function Name () ; ) ()
是无效的,大多数人使用的“正常”功能语句(function name () ;
)只是var name = function () ;
的快捷方式。
请注意!
不调用函数。其目的是使解析器将函数定义视为表达式,而不是语句。
@JohannesH.:在较旧的 IE 版本中确实如此(这是一个错误)。规范规定函数 expression 的名称仅在函数本身内可见。它非常适合调试和递归函数。
+1 但是要小心使用 +
和 -
运算符,因为它们也被重载为二元运算符。因此,如果您在前一行省略分号,可能会产生不希望的结果。不重载的一元运算符最好,如!
、void
、~
等。【参考方案2】:
很好地解释了函数调用 https://github.com/airbnb/javascript/issues/44#issuecomment-13063933
!function () ();
等价于
(function())();
除了作者节省了 1 个字节的代码。
在很多情况下,这是为了节省字节数。
!function aaa()()
!function bbb()();
和这个是一样的:
!function aaa()()
;(function bbb())();
注意“;”在最后一点。这是防御性的,因为它可以保护您的代码免受可能在它之前出现的失控 js 的影响。
有趣的是,我前段时间也问过同样的问题:
Came across a convention I've never seen. What does it do? !function
很好的参考: What does the exclamation mark do before the function?
【讨论】:
仅供参考:在其他编程语言中,类似的事情很常见。例如,在 bash 脚本中,“什么都不做命令”(:
)通常用于评估变量扩展。以上是关于javascript (function())() 请问和一般的function()有啥不同?的主要内容,如果未能解决你的问题,请参考以下文章
javascript中Function.prototype的问题