js 裡面的 function 與 Function
阿新 • • 發佈:2018-11-06
function 是 js 的識別符號
Function 是 js 裡面的一個 建構函式
1、new function 與 new Function 的區別
new 運算子在 js 裡面是 建立一個自定義的物件的例項 或者是 一個具有建構函式的本地物件
語法:new constructor [ ( [ arguments ] ) ]
new function() {…} 初始化一個可操作物件,相當於 new function 匿名函式() {…}
new Function(‘引數’, ‘函式體’) 是例項化一個函式,相當於 function 函式名() {…}
2、立即執行函式 ( function(){…} () ) 和 ( function(){…} )()
// 1、 // 定義一個命名函式 a 並呼叫,正常執行 function a(){}a() // 2、 // 2 假設使用匿名函式的方式呢? function (){}() //這種方式會報錯:Uncaught SyntaxError: Unexpected token ( // 3、 //按到如上思路測試,尋找 2 報錯的原因 function () {}//前端全棧交流學習圈:866109386 // 3 會報錯,與 2 報錯相同:Uncaught SyntaxError: Unexpected token ( // 4、 (); // 4 會報錯:Uncaught SyntaxError: Unexpected token ) // 5、 (1); // 5 不會報錯正常執行 // 6、 (function(){}); // 6 不會報錯正常執行
可以看出,上述現象報錯的原因都是:語法錯誤。究其原因發現是因為 ()運算子的優先順序函式呼叫,而 () 運算子的括號內必須有表示式,否則就會有語法錯誤。
因此可以用 (function(){})() 的形式定義一個自呼叫的匿名函式
//1、 (1+2)(5+6); //在進行如上表達式運算的時候,會報錯:Uncaught TypeError: 3 is not a function,也就是說如果第一個表示式是一個 function 的話,就會正常執行。 //2、所以在保證整個運算為表示式運算的情況下,第一個子表示式為 function,則得出如下寫法 (function(){}()); // 2 正常執行不會報錯 // 3、因此可以得出如下寫法也都是正確的 !function(){}; +function(){}; -function(){}; ~function(){}; ......