js匿名函數的預編譯
㈠ JavaScript 匿名函數有哪幾種執行方式
JavaScript的函數定義分為函數聲明和函數表達式。
表達式語句不得以 function 或者 { 開頭:
ExpressionStatement → [lookahead ∉ {{, function}] Expression;
」裸寫「成function fname() { }的,是函數聲明,它不能是匿名的。
var c = 1;
function test(x) {
console.log(x);
}
// 調用
test(x);
嵌套定義的函數也可以是函數聲明。
// innder、outer都是函數聲明,只不過外界無法使用inner函數。。
function outer() {
var x = 1;
function inner() {
console.log("Hi");
}
}
函數作為表達式出現、或者作為其他表達式的一部分時才是函數表達式(有點繞。。),此時函數可以是匿名或者有名的。
比如賦值表達式的右邊;()和[]裡面;!等符號後面;return語句後面;。。
var foo = function() {
...
};
(function foo() {});
[Function bar() {}];
function outer() {
var x = 1;
return function inner() {
console.log(x);
}
}
描述不同語法結構的語義時,主要和表達式的求值相關。比如賦值的時候需要對=右邊的表達式求值,return的時候需要對return後面的求值。
函數表達式的值可以是一個函數對象,或者對這個函數對象進行調用(也就是執行它)產生的結果。
// =右邊表達式的」值「是一個函數對象,賦給t。不發生函數調用
var t = function () {
console.log(3);
};
// =右邊表達式,先創建函數對象再調用它。t是5
var t = function (x) {
return x + 2;
}(3);
函數聲明自身不能「求值」。
㈡ js 中對象與匿名函數的問題
js中apply()方法是函數的一個屬性point.getX().apply() 這么用的時候,getX() 這是一個執行的函數,返回值是一個數字
p.apply(),p是一個函數
正確寫法應該是point.getX.apply()
㈢ 【JS】匿名函數
本節講解 3 種原生JS的匿名函數。
匿名函數又叫立即執行函數。
因為是匿名的,所以不能被調用。
因為不能被調用,所以不立即執行的話就沒意義了。
因為立即執行,所以在執行完之後就會被銷毀。
第一種(常用)
( function(){…} )()
第二種(常用)
( function(){…}() )
第三種(不常用)
~function(){…}()
前兩種寫法,返回值都是正常的。
第三種寫法的返回值會比較奇怪,所以很少用。
第一種寫法
在控制台輸出 1
第二種寫法
在控制台輸出 2
第三種寫法
在控制台輸出 -4
在控制台輸出2
假設第三種寫法的返回值是未知數 x。
則得到的返回值是:-(x + 1)
㈣ js中匿名函數問題
首先大的結構式一個匿名函數,匿名函數其中的一種形式就是這樣,之所以用括弧包起來並且在最後加一個括弧是為了調用這個匿名函數。形式如下:
(function(){
......
})();
這樣寫的好處是里邊的變數都是封閉的,不對外開放,減少了全局變數帶來的混亂。
詳細的你可以查一下匿名函數和閉包
