W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
(function myData() {
console.log("myData was executed!");
})();
立即執(zhí)行的函數(shù)創(chuàng)建一個(gè)新的變量作用域。if,else或while不會(huì)在JavaScript中創(chuàng)建新的變量作用域。
var myData = 123;
if (true) {
var myData = 456;
}
console.log(myData); // 456;
在JavaScript中創(chuàng)建新的變量作用域的唯一推薦方法是使用函數(shù)。下面的代碼顯示了如何使用立即執(zhí)行的函數(shù)創(chuàng)建一個(gè)新的變量范圍。
var myData = 123;
if (true) {
(function () { // create a new scope
var myData = 456;
})();
}
console.log(myData); // 123;
沒有名稱的函數(shù)稱為匿名函數(shù)。在JavaScript中,可以將函數(shù)分配給變量。如果你要使用一個(gè)函數(shù)作為一個(gè)變量,你不需要命名該函數(shù)。
下面的代碼顯示了兩個(gè)定義函數(shù)內(nèi)聯(lián)的方法。這兩種方法都是等效的。
var foo1 = function namedFunction() {
console.log("foo1");
} /*o2fo.com*/
foo1(); // foo1
var foo2 = function () { // no function name i.e. anonymous function
console.log("foo2");
}
foo2(); // foo2
如果一個(gè)函數(shù)的處理方式與語言中任何其他變量的處理方式相同,那這種編程語言被稱為具有一流功能。而JavaScript具有一流的功能。
由于JavaScript允許我們?yōu)樽兞抠x值函數(shù),我們可以將函數(shù)傳遞給其他函數(shù)。將函數(shù)作為參數(shù)的函數(shù)稱為高階函數(shù)。高階函數(shù)的一個(gè)非常常見的例子是setTimeout。
以下代碼顯示如何使用setTimeout函數(shù)。
setTimeout(function () {
console.log("2000 milliseconds have passed since this demo started");
}, 2000);
如果在Node.js中運(yùn)行此應(yīng)用程序,你會(huì)在兩秒后看到console.log消息然后應(yīng)用程序?qū)⑼顺?。我們使用一個(gè)匿名函數(shù)作為setTimeout的第一個(gè)參數(shù)。這使得setTimeout是一個(gè)高階函數(shù)。我們可以創(chuàng)建一個(gè)函數(shù)并傳入。
function foo() {
console.log("2000 milliseconds have passed since this demo started");
}
setTimeout(foo, 2000);
如果在另一個(gè)函數(shù)內(nèi)定義了一個(gè)函數(shù),內(nèi)部函數(shù)可以訪問在外部函數(shù)中聲明的變量。外部函數(shù)中的變量已經(jīng)被內(nèi)部函數(shù)關(guān)閉。這個(gè)概念本身是足夠簡單和直觀的。
function outerFunction(arg) {
var variableInOuterFunction = arg;
function myValue() {
console.log(variableInOuterFunction);
}
myValue();
}
outerFunction("hello closure!"); // logs hello closure!
內(nèi)部函數(shù)可以從外部范圍訪問變量,即使在外部函數(shù)已返回時(shí)。因?yàn)樽兞咳匀辉趦?nèi)部函數(shù)中綁定,而不依賴于外部函數(shù)。
function outerFunction(arg) {
var variableInOuterFunction = arg;
return function () {
console.log(variableInOuterFunction);
}
}
var innerFunction = outerFunction("hello closure!");
innerFunction();
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: