函式作用域及函式表示式
一、函式作用域
在JavaScript中,作用域分為全域性作用域及函式作用域(區域性作用域);
例如:
var num = 100; function fun(){ console.log(num) var num1 = 200; function fun2(){ console.log(num1); } } fun()
執行後都會正常輸出num及num1的值,
用var定義的變數,在函式外定義的為全域性變數,在函式內定義的為區域性變數,作用域有所不同,但全域性變數是相對的,如上對num1的定義對函式內的fun2函式同樣產生了全域性變數的效果。
function fun (){ var num = 100; } fun(); console.log(num);
但如果是這樣,在函式裡面定義在函式外面輸出,結果就是undefined。
function fun (){ num = 100; } fun(); console.log(num);
另外,如果變數不通過var來定義而是直接定義,那麼就是一個全域性變數,如上就會正常輸出。
二、函式宣告和函式表示式
1、函式宣告和函式表示式分別是什麼
我們常見的函式寫法如 function fun(){ } 這樣的稱之為函式宣告
fun = function (){ } 這樣的稱之為函式表示式
2、函式宣告和函式表示式的區別
對於函式表示式而言,函式名可有可無,而對於宣告函式,需通過函式名來呼叫;
函式表示式可以直接被執行符號執行:
var fun2 = function(){ //函式表示式 console.log("world"); }()
那麼對於函式宣告就不能這麼執行了,但是,在函式宣告前面加上+-!可以讓函式宣告變成函式表示式:
+function fun(){ //函式宣告 console.log("hello"); }() // 在函式的前面可以加上+-!可以讓函式宣告變成函式表示式
3、立即執行函式
什麼是立即執行函式:函式聲明瞭以後直接自己執行,用函式的返回值,適合做初始化的工作。
如:
+function(){ //立即執行函式 console.log("hello") }()
這就是一個立即執行函式;
當立即執行函式中引數並沒有給定的時候,輸出引數為undefined
function fun(a,b){ console.log(a); console.log(b) } fun(3)
如上,輸出的a為3,輸出的b為undefined。
另外,例如:
var abc = "helloworld" (function(){ //寫功能型的時候,在立即執行函式前面加上分號 console.log(456) })()
這樣在執行的時候會報錯,
在JavaScript中,一般情況未新增的“;”會自動補全,但是在寫功能性的時候注意,在立即執行函式前面加“;”。