1. 程式人生 > >js 裡面的 function 與 Function

js 裡面的 function 與 Function

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(){};
......