码迷,mamicode.com
首页 > Web开发 > 详细

JS自调用函数问题(立即执行函数)

时间:2019-12-09 21:10:30      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:执行   语法错误   生成   指南   分组   没有   OLE   错误   求值   

第一个问题

  function ( ) {

  console.log("fun1");

   }() 为什么执行不了?

.

“函数使用function关键字来定义,可以使用函数定义表达式或者函数声明语句。两种形式中,函数定义都是从function关键字开始。其后跟随:函数名称标识符(函数名称是函数声明语句必需的部分;对于函数定义表达式来说,这个名字是可选的:如果存在,该名字只存在于函数体中,并指代该函数对象本身)。”—摘自《JavaScript权威指南》

 

1、使用function声明的函数,必须要有函数名称,否者会抛出语法错误。上面的代码执行过程中,解析器解析function关键字时,默认该代码是function声明,而不是function表达式,编译器会默认生成一个缺少名字的function,并且抛出一个语法错误。

代码执行结果,如图:

 

 

2、那么试一下给function加上名字,看看还会不会报错。

 

结果依然报错,虽然上面的代码已经没有语法问题,但是问题出在圆括号运算符“( )”,我们来理解一下圆括号运算符“( )”,也称为分组运算符,它有两种用法:如果表达式放在圆括号中,作用是求值;如果跟在函数后面,作用是调用函数。

为什么会这样呢?在一个表达式后面加上圆括号,表示该表达式立即执行;而如果是在一个语句后面加上括号,该括号完全和之前的语句不搭,而只是作为一个分组运算符,用来控制运算中的优先级(小括号里的先运算),所以以上代码等价于:

 

相当于先声明了一个叫fn的函数,之后进行“( )”内的表达式运算,但是“( )”分组运算符内的表达式不能为空,所以报错。

 

 

第二个问题

(function ( ) {

  console.log("fun1");

   })()

.

(function ( ) {

  console.log("fun1");

   }())

 

为什么能执行?

 

1、在JavaScript里,括号内部不能包含语句,当解析器对代码进行解析的时候,先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明。

2、(function(){})会返回函数对象的引用,最后使用圆括号()调用此函数。

第一个问题

  function ( ) {

  console.log("fun1");

   }() 为什么执行不了?

.

“函数使用function关键字来定义,可以使用函数定义表达式或者函数声明语句。两种形式中,函数定义都是从function关键字开始。其后跟随:函数名称标识符(函数名称是函数声明语句必需的部分;对于函数定义表达式来说,这个名字是可选的:如果存在,该名字只存在于函数体中,并指代该函数对象本身)。”—摘自《JavaScript权威指南》

 

1、使用function声明的函数,必须要有函数名称,否者会抛出语法错误。上面的代码执行过程中,解析器解析function关键字时,默认该代码是function声明,而不是function表达式,编译器会默认生成一个缺少名字的function,并且抛出一个语法错误。

代码执行结果,如图:

 

 

2、那么试一下给function加上名字,看看还会不会报错。

 

结果依然报错,虽然上面的代码已经没有语法问题,但是问题出在圆括号运算符“( )”,我们来理解一下圆括号运算符“( )”,也称为分组运算符,它有两种用法:如果表达式放在圆括号中,作用是求值;如果跟在函数后面,作用是调用函数。

为什么会这样呢?在一个表达式后面加上圆括号,表示该表达式立即执行;而如果是在一个语句后面加上括号,该括号完全和之前的语句不搭,而只是作为一个分组运算符,用来控制运算中的优先级(小括号里的先运算),所以以上代码等价于:

 

相当于先声明了一个叫fn的函数,之后进行“( )”内的表达式运算,但是“( )”分组运算符内的表达式不能为空,所以报错。

 

 

第二个问题

(function ( ) {

  console.log("fun1");

   })()

.

(function ( ) {

  console.log("fun1");

   }())

 

为什么能执行?

 

1、在JavaScript里,括号内部不能包含语句,当解析器对代码进行解析的时候,先碰到了(),然后碰到function关键字就会自动将()里面的代码识别为函数表达式而不是函数声明。

2、(function(){})会返回函数对象的引用,最后使用圆括号()调用此函数。

JS自调用函数问题(立即执行函数)

标签:执行   语法错误   生成   指南   分组   没有   OLE   错误   求值   

原文地址:https://www.cnblogs.com/weizhichang/p/12013364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!