Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014-06-24 00:00
260 查看
函数声明
函数 foo 将会在整个程序执行前被 hoist (提升),因此它在定义 foo 函数的整个 scope (作用域)中都是可用的。即使在函数定义之前调用它也没问题。
因为我打算专门写篇介绍作用域的文章,所以这里就不详述了。
函数表达式
对于函数声明,函数的名称是必须的,而对于函数表达式而言则是可选的,因此,就出现了匿名函数表达式和命名函数表达式。如下:
函数声明: function functionName (){ }
函数声明: function functionName[可选](){ }
那么我就知道,如果没有函数名的话,一定就是函数表达式,但是对于有函数名的情况该如何判断呢?
Javascript 规定如果整个函数体是作为表达式的一部分时,那么它就是函数表达式,否则即是函数声明。以下为表达式:
我们再举几个极端的表达式例子:
以上的语句这里只是为了区分函数表达式,一般不会这样写。那么用一个对比的例子来看看效果:
匿名函数表达式
上面的例子将一个匿名函数赋值给了变量 foo。
由于 var 是一个声明所以这里对变量 foo 进行 hoist (提升),因此当程序执行时,变量 foo 是可调用的。
但是由于赋值语句只有在运行时才生效,所以变量 foo 的值为 undefined。
命名函数表达式
另一个要讲到的就是命名函数的赋值。
在这里,命名函数 bar 赋值给了变量 foo,所以在函数声明外是不可见的,但在 bar 函数内部仍然可以调用。这是因为 Javascript 对命名函数处理的机制,函数的名称永远在函数内部的作用域中有效。
function foo() {}
函数 foo 将会在整个程序执行前被 hoist (提升),因此它在定义 foo 函数的整个 scope (作用域)中都是可用的。即使在函数定义之前调用它也没问题。
foo(); // Works because foo was created before this code runsfunction foo() {}
因为我打算专门写篇介绍作用域的文章,所以这里就不详述了。
函数表达式
对于函数声明,函数的名称是必须的,而对于函数表达式而言则是可选的,因此,就出现了匿名函数表达式和命名函数表达式。如下:
函数声明: function functionName (){ }
函数声明: function functionName[可选](){ }
那么我就知道,如果没有函数名的话,一定就是函数表达式,但是对于有函数名的情况该如何判断呢?
Javascript 规定如果整个函数体是作为表达式的一部分时,那么它就是函数表达式,否则即是函数声明。以下为表达式:
var fuc = foo(){}
我们再举几个极端的表达式例子:
!function foo(){} true && function foo(){}
以上的语句这里只是为了区分函数表达式,一般不会这样写。那么用一个对比的例子来看看效果:
foo1();//foo1 is not defined foo2();//works because foo2 was created before this code runs !function foo1() { alert('foo1 works'); }; function foo2() { alert('foo2 works'); };
匿名函数表达式
var foo = function() {};
上面的例子将一个匿名函数赋值给了变量 foo。
foo; // 'undefined'
foo(); // this raises a TypeErrorvar foo = function() {};
由于 var 是一个声明所以这里对变量 foo 进行 hoist (提升),因此当程序执行时,变量 foo 是可调用的。
但是由于赋值语句只有在运行时才生效,所以变量 foo 的值为 undefined。
命名函数表达式
另一个要讲到的就是命名函数的赋值。
var foo = function bar() { bar(); // Works }; bar(); // ReferenceError
在这里,命名函数 bar 赋值给了变量 foo,所以在函数声明外是不可见的,但在 bar 函数内部仍然可以调用。这是因为 Javascript 对命名函数处理的机制,函数的名称永远在函数内部的作用域中有效。
相关文章推荐
- Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
- javascript 函数声明和函数表达式的区别(学习笔记)
- JavaScript学习笔记(十) 函数声明VS函数表达式
- <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式
- 【JavaScript 学习--12】--js 中两种函数定义的区别:函数声明和函数表达式
- JavaScript笔记整理 —— 函数声明与表达式
- JavaScript高级程序设计学习笔记--函数表达式
- 栋栋晓12:Javascript学习总结:函数声明和函数表达式的区别,apply和call的区别,
- JavaScript学习笔记:判断变量是否为undefined,判断变量和函数是否声明
- Javascript学习笔记3 函数表达式 闭包
- JavaScript高程学习笔记之函数表达式(7)
- JavaScript高程学习笔记之函数表达式(7)
- JavaScript学习笔记之函数表达式与闭包
- JavaScript学习笔记(八)--- 函数表达式
- JavaScript 学习笔记 之正则表达式
- php学习笔记之---[函数声明(二)]
- Javascript中的函数声明与函数表达式(奇技淫巧)
- php学习笔记之 函数声明
- JavaScript 正则表达式学习笔记
- Javascript中的函数声明和函数表达式