javascript - js下面的区别,一个可以执行,一个不行
迷茫
迷茫 2017-04-10 14:56:58
0
8
428

function jam(){
console.log("ok");
}()

jamlee 2015/2/14 22:49:11
(function jam(){
console.log("ok");
}())

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

reply all(8)
PHPzhong

@公子 答案没说清楚,js中的分隔符就是任意的空白符,像是空格,tab,换行等都算,你有一个还是两个没影响。

正确的解释是应该函数表达式与函数声明的区别。

详细的解释还是看看这里:
http://stackoverflow.com/questions/1634268/explain-javascripts-encapsulated-anonymous-function-syntax/1634321#1634321

巴扎黑

实际上,第一种写法会抛出SyntaxError

function jam(){
console.log("ok");
}()

在 JavaScript 代码解析的时候,如果碰到 function 开头的语句,默认为认为这是一个函数声明。所以在编译器看来,上述的代码就是:

function jam(){
console.log("ok");
}

()

也就是说,在编译器看来,这个语句做了两件事情:

  1. 声明了一个jam()函数
  2. 使用()运算符

声明函数是合法的,但是使用()运算符时出错了。 在 JavaScript 中,()使用有两种场景,一种是作为函数调用符,一种是分隔表达式(提高优先级)。而上面这个代码中,无论哪个场景都不符合,所以抛出了一个语法错误。

第二段代码是 立即执行的匿名函数表达式(IIFE)。

更详细的可以参考这篇文章: [译] 立即执行函数表达式(IIFE)

洪涛

第一个其实就是

function jam(){
    console.log("ok");
}

()
伊谢尔伦

~function jam(){
console.log("ok");
}()
!function jam(){
console.log("ok");
}()
+function jam(){
console.log("ok");
}()
-function jam(){
console.log("ok");
}()
*function jam(){
console.log("ok");
}()

小葫芦

纠正一下写法

;!(function(){console.log(123)})()
阿神

首先你要定义一个函数,于是你会这么写:
function jam() {};
其实这是 js 里的一种语法糖,它等价于:
var jam = function() {};
然后你想执行这个函数,脑洞大开的人会这么写:
function jam() {}();
但是这么写就报错了,其实这种写法也不算错,因为它确实是 js 支持的函数表达式,但是同时 js 又规定以 function 开头的语句被认为是函数语句,而函数语句后面是肯定不会带 () 的,所以才报错,于是聪明的人想出来,加上一对括号就可以了。于是就变成了这样:
(function jam() {}())
详情参加 ECMAScript 的 Expression Statement 章节:链接描述

Peter_Zhu
  1. 这是js的声明式函数和函数表达式的区别,声明式函数是以function关键字作为一句话的开头的函数,而任何不以function开头的(只限在一句话内)函数,都是函数表达式。
  2. 函数声明不能通过直接在后面田间()来自执行,而函数表达式则可以。
迷茫

这是两种不同的函数形式,第一种是函数定义式,第二种是函数的自执行,后面的圆括号用来执行函数。而且一般都是匿名函数采取的。其实是这样的:()()第一个括号包裹整个函数,而第二个圆括号用来执行函数的

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!