Rumah > hujung hadapan web > tutorial js > JavaScript进阶系列——函数声明与表达式

JavaScript进阶系列——函数声明与表达式

黄舟
Lepaskan: 2017-02-08 10:00:36
asal
1192 orang telah melayarinya
  • 函数声明

  • 函数赋值表达式

  • 命名函数的赋值表达式


函数是JavaScript中的一等对象,这意味着可以把函数像其它值一样传递。一个常见的用法是把匿名函数作为回调函数传递到异步函数中。

函数声明

function foo() {}
Salin selepas log masuk

上面的方法会在执行前被 解析(hoisted),因此它存在于当前上下文的任意一个地方, 即使在函数定义体的上面被调用也是对的。

foo(); // 正常运行,因为foo在代码运行前已经被创建
function foo() {
Salin selepas log masuk

函数赋值表达式

var foo = function() {};
Salin selepas log masuk

这个例子把一个匿名的函数赋值给变量 foo 。

foo; // 'undefined'
foo(); // 出错:TypeError
var foo = function() {};
Salin selepas log masuk

由于 var 定义了一个声明语句,对变量 foo 的解析是在代码运行之前,因此 foo 变量在代码运行时已经被定义过了。

但是由于赋值语句只在运行时执行,因此在相应代码执行之前, foo 的值缺省为 undefined。

命名函数的赋值表达式

另外一个特殊的情况是将命名函数赋值给一个变量。

var foo = function bar() {
    bar(); // 正常运行
}
bar(); // 出错:ReferenceError
Salin selepas log masuk

bar 函数声明外是不可见的,这是因为我们已经把函数赋值给了 foo ; 然而在 bar 内部依然可见。这是由于 JavaScript 的 命名处理 所致, 函数名在函数内总是可见的。

注意:在IE8及IE8以下版本浏览器bar在外部也是可见的,是因为浏览器对命名函数赋值表达式进行了错误的解析, 解析成两个函数 foo 和 bar 


以上就是JavaScript进阶系列——函数声明与表达式的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!


sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan