JavaScript function expression vs function declaration
来源:互联网 发布:qq五笔for mac下载 编辑:程序博客网 时间:2024/06/02 13:12
在Javascript中创建function有两种方式:function expression 和function declaration。它们的定义分别是:
FunctionDeclaration:
FunctionIdentifier(formatParameterListOpt) { FunctionBody}
FunctionExpression:
Function IdentifierOpt(formatParameterListOpt){FunctionBody}
从它们的定义来看,唯一的区别是identifier是否是optional。如果identifier出现了,我们该如何区分它们呢?ECMAScript通过如下的方式来区分它们,如果function foo(){}是一个赋值表达式,此时是function expression。而functionfoo(){}在一个函数体内或者在程序中,此时是function declaration。
function foo(){} // declaration, since it is part of a programvar bar=function foo(){};// expression, since it is part of an assignmentExpressionnew function bar(){}; // expression, since it is part of NewExpression(function() { function bar(){} // declaration, since it is part of FunctionBody})();
有一种特殊的情况是:当函数被小括号(grouping operator)包装的时候,此时作为function expression
function foo(){} // function declaration(function foo(){}); // function expression, due to grouping operator
当然,function declaration与function expression还是有区别的。
1. functiondeclaration hoisting: 函数declaration在其它表达式之前被解释以及执行。
alert(fn()); // output: hello JavaScriptfunction fn() {return'hello JavaScript';}
2. functiondeclaration在block { …}中,尤其是if,while,for表达式里的行为是未定义的,never do it.
//never do it// some browser will declare `foo` as the one returning ‘first’// while others returning ‘second’if (true){function foo(){return ‘first’;}}else{function foo(){return ‘second’;}}// Instead, use function expressionvar foo;if (true){foo = function(){return ‘first’;};}else {foo = function() {return ‘second’;}}
当function declaration有名字(即identifier),曰named function expression,如var bar = function foo(){}; foo是函数名,需要注意的是foo的scope
var f = function foo(){return typeof foo; // foo is available in this inner scope}// foo is never visible outsidetypeof foo; // undefinedf(); // function
- JavaScript function expression vs function declaration
- JavaScript中Function Declaration与Function Expression 或者说 function fn(){}和var fn=function(){} 的区别
- 关于JavaScript中Function Declaration与Function Expression的进一步说明
- IIFE (immediate-invoke function expression ) in javascript
- function declaration and definition
- implicit declaration of function
- implicit declaration of function
- ECMAScript Standard: Function Declaration
- implicit declaration of function
- JavaScript function return function..
- 解决warning:implicit declaration of function 'Xil_Out32' [-Wimplicit-function-declaration]
- implicit declaration of function abs
- implicit declaration of function 'class_device_create'
- error: implicit declaration of function '********'
- implicit declaration of function ‘br_port_exists’
- implicit declaration of function ‘luaL_register’
- implicit declaration of function "class_device_create"
- implicit declaration of function 'i2c_transfer'
- mysql安装及配置图解
- mysql 数据库备份还原
- 最牛B的编码套路【转自web开发者】
- 基于xmapp的wordpress的安装
- 安装VS2010 Service Pac…
- JavaScript function expression vs function declaration
- 用户不在sudoers文件中的解决方法&…
- Linux jdk1.6安装与卸载
- ssh配置authorized_keys后仍然需要…
- RedHat yum 源配置
- 使用ssh-keygen设置ssh无密码登录
- Hadoop集群(第5期)_Hadoop安装配…
- RHEL6.5使用CENTOS的YUM源 分…
- 配置hadoop-1.2.1 eclipse开发环境