手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javascript 函数声明与函数表达式的区别介绍
javascript 函数声明与函数表达式的区别介绍
摘要:还是一样,先上代码:复制代码代码如下:varf=functiong(){return1;};if(false){f=functiong(){...

还是一样,先上代码:

复制代码 代码如下:

<script>

var f = function g() {

return 1;

};

if (false) {

f = function g(){

return 2;

};

}

alert(g()); // 2

</script>

把这段代码扔到IE 6 里面和chorme里面是完全不同的两种效果。

这里输出2 是在ie6里面的效果,如果在chorme会出现g没有定义。

这也算是JScript的bug吧。

在这里很明显,这里的只是定义了g的函数表达式而已。包括在if的条件语句中,也只是定义了函数表达式,没有去声明函数。

那么这样直接访问肯定是会出错的。

那么对于何为声明,何为函数表达式呢?

在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符:

函数声明:

function 函数名称 (参数:可选){ 函数体 }

函数表达式:

function 函数名称(可选)(参数:可选){ 函数体 }

所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函数声明还是函数表达式呢?ECMAScript是通过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。

还有一种函数表达式不太常见,就是被括号括住的(function foo(){}),他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式。

你可能会想到,在使用eval对JSON进行执行的时候,JSON字符串通常被包含在一个圆括号里:eval('(' + json + ')'),这样做的原因就是因为分组操作符,也就是这对括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块。

【javascript 函数声明与函数表达式的区别介绍】相关文章:

JavaScript中strike()方法的使用介绍

javascript实现表格增删改操作实例详解

javaScript中with函数用法实例分析

javascript中this的四种用法

浅谈javascript中的闭包

JavaScript 正则表达式中global模式的特性

JavaScript中的函数嵌套使用

javascript嵌套函数和在函数内调用外部函数的区别分析

javascript基础知识分享之类与函数化

javascript中动态函数用法

精品推荐
分类导航