函数声明与函数表达式
2017-08-12 12:04
232 查看
什么是函数声明和函数表达式?
// 函数声明 function 函数名(){} // 当你写名字的时候叫做命名函数表达式;如果没有名字,叫做匿名函数表达式 function 函数名(可写可不写)(){}
如何区分函数声明和函数表达式?
区分一个函数到底是函数声明还是函数表达式,要看这个函数在整个代码中的上下文:// 这个写到了页面的最顶端:函数声明 function aaa(){}/ // 命名函数表达式 var a = function aaa(){} // 匿名函数表达式 var a = function(){} // 把一个函数放到一个括号中他也会变成一个函数表达式 (function aaa(){})//表达式 // 在前面加上一个位运算符,也是一个函数表达式 -function aaa(){}//表达式 ~function aaa(){}//表达式 !function aaa(){}//表达式 +function aaa(){}//表达式
二者的区别?
1:函数表达式可以直接后面加括号执行,而函数声明是不行的//函数声明后面直接加括号是执行不了的 function aaa(){alert(123)}(); //函数表达式后面加括号是可以直接执行的 var a = function aaa(){alert(123)}(); ~function aaa(){alert(456)}();
2:函数声明可以被提前解析出来,也叫做函数声明的预解析
if(true){ function aaa(){ alert(1); } }else{ function aaa(){ alert(2); } } aaa(); //上面的两个函数声明都会被提前预解析,其实这个 if 判断是在解析之后发生 //的动作,这样的话,在不同的浏览器下的结果是不一样的,在 ie 下是2;而在 //ff 下是1,在chrome 下也是1
//如果换成函数表达式 if(true){ var a = function aaa(){ alert(1); } }else{ var a = function aaa(){ alert(2); } } a();// 1 //所以我们在写程序的时候要想在不同的语句中执行不同的函数,一定不要用函数声明,要函数表达式
命名函数表达式和匿名函数表达式的区别?
var a = function aaa(){ alert(1); alert(typeof aaa); //aaa 在函数内部是可以找到的 } //当我们写了一个有名函数表达式的时候,如果调用变量 a 这个是所有的浏览器都支持的 a(); // aaa(); //而当你直接调用函数的名字的话,在 ff 下报错,在 ie 下是可以的,也就是 //说 aaa 在函数外部是找不到的,所以我们一般是不推荐使用命名函数表达式的
一道面试题
(function aaa(){alert(1)}) aaa();// aaa is not defined //有名函数表达式的名字在函数外面是找不到的
什么时候使用有名函数表达式?
// 当你在 debuge 的时候要使用有名函数表达式 function aaa(){ return bbb(); } function bbb(){ debugger; } aaa(); //这个时候你在 dubugger 的时候就会一目了然,到底是哪个函数调用了那个函数,一眼就看出来了
相关文章推荐
- 函数声明与函数表达式不同2
- 函数声明的几种方式,函数声明与函数表达式的区别,函数调用的几种方式
- 第七章 函数表达式和函数声明,关于this对象 ,私有作用域(function(){})() ,私有变量和特权方法
- 函数声明与函数表达式
- 函数声明与函数表达式
- 函数声明和函数表达式的区别
- 函数声明 和 函数表达式
- 函数表达式和函数声明/()是一个分组操作符/Module模式/匿名闭包/克隆/function的执行
- 函数声明和函数表达式的区别
- 函数声明与函数表达式的区别
- 函数声明和函数表达式
- 函数声明和函数表达式
- 函数声明和函数表达式
- 函数声明和函数表达式
- 函数声明和函数表达式——函数声明和函数表达式的异同
- 函数声明, 函数表达式, 使用Function构造函数
- 函数声明,函数表达式,块级作用域小结
- 函数声明与函数表达式
- 函数声明与函数表达式
- 函数表达式和函数声明~(自己的记录)