这些javascript函数之间的区别

时间:2012-02-16 06:35:10

标签: javascript

两个功能之间的区别:

(function($){
  console.log($);
}("test"));

(function($){
  console.log($);
})("test");

我已经在网络控制台上尝试了它并按了“运行”。他们回归同样的事情。与括号位置的变化究竟有什么不同?

我假设第二个立即运行,对吧?

3 个答案:

答案 0 :(得分:2)

两个片段相同;两个函数都不返回值,并且都将其参数记录到控制台。同样,使用参数"test"调用两个匿名函数。

唯一的区别在于语法,关于函数定义与其应用程序对其参数的分组。第一个函数将函数定义与()运算符分组,而第二个函数将函数定义与其应用程序分开。

最终没有语义差异。两个片段都包含一个匿名函数,该函数记录其参数,然后使用参数“test”调用。

答案 1 :(得分:2)

我能想到的唯一区别是,如果将变量分配给第一组括号内的函数,则会得到不同的结果,具体取决于分组。

var test;

(test = function(arg) {
  console.log(arg)
})('I am the argument!')

按预期工作:它将'test'分配给函数,然后使用第二组括号中的参数运行一次。它与设置测试相同,然后使用test('I am the argument!')

运行它

但另一种方式呢?

var test;

(test = function(arg) {
  console.log(arg)
}('I am the argument!'))

test未定义!为什么?因为当你将括号放在函数旁边时,它会调用函数之前然后将它赋给变量。如果你将作业包装在括号中然后运行它(例1)那么你就可以了。

答案 2 :(得分:1)

绝对没有区别

在第一种情况下,您可以在没有范围的情况下为您的函数提供“test”值,并且没有任何区别。它会以同样的方式工作。