JavaScript種作用域初識
多種函數的創造和執行方法
有名函數
<script>
len fun1=function(){}//函數名fun1
function fun2(){}//函數名fun2
</script>
事件函數和函數名加括號執行
元素.事件名稱=函數名稱。
<div></div>
<script>
//事件函數
let oDiv=document.getElementsByTagName("div");
function fun(){
console.log(this.innerHTML);
oDiv.onclick=fun;
/*
元素.事件名稱=函數名稱。
*/
//函數名加括號執行
var fun1=function(){
console.log(1);
}();//函數立即執行輸出1,函數變量fun1的結果是undefined
//這裏首先可以看作是一個賦值語句,等號左邊變量fun1,等號右邊是一個匿名函數,而且這個函數還執行了。所以變量fun1的值是右側匿名函數的返回值,而匿名函數又沒有返回值,所以是undefined。
</script>
IIFE(立即執行函數表達式)
實現:
運算符 函數;
這種類型的立即執行函數其實可以從計算公式去理解,
比如:
function add(){
return 3;
}
var a=1+add();//結果是4
add函數執行一次返回3,那麼我們去掉1
var b=+add();//b就等於3
我們不如把變量去掉,那麼就是+add();它依然會執行,然後在內存中存了一個數據3.
全局作用域
一個頁面就是一個完整的執行環境,裏面就存在唯一的一個作用域就是全局作用域,全局作用域的本質就是全局對象的屬性。
瀏覽器的全局對象是window,我們申明的變量都相當於在全局對象window下添加屬性。
<script>
var a=2;
console.log(a===window.a)//true
</script>
函數作用域
函數作用域。函數裏面所有定義的新變量只有在函數作用域內纔可以調用,外部訪問函數作用域的變量,但是函數內部可以訪問函數外部的變量。
不同函數的作用域不一樣。
<script>
var a2="這是foo外";
function foo(){
var a1="這是foo內";
console.log(a1,a2);
}
foo()//"這是foo內" "這是foo外"
console.log(a1,a2)//報錯
</script>
函數參數的多種方式之標準傳參
函數參數的多種方式之arguments
函數在定義是規定了參數,那麼函數在執行的時候會在定義參數的變量同時把傳入進來的參數存儲在argument數組中。
589512013302)]
函數參數的多種方式之arguments
函數在定義是規定了參數,那麼函數在執行的時候會在定義參數的變量同時把傳入進來的參數存儲在argument數組中。