js原理:原型鏈、執行上下文、事件迴圈
預備知識
1 棧 stack
棧是類似於陣列的一種資料結構。
2物件引用
//user1指向使用者物件
//user1持有使用者物件的引用
var user1=
var user2=user1;
user2.name="張三";
console.log(user1.name,user2.name);//張三 張三
概念
執行上下文:某個函式或全域性**的執行環境,該環節中包含執行**需要的所有資訊
可以簡單的理解為 執行上下文是乙個物件,物件中包含了執行**所需要的資訊
當執行乙個函式時,需要建立執行上下文,才正式開始執行
call stack(執行上下文棧):組織管理程式執行過程中的執行上下文
var a =2;
function bar()
foo();
console.log("123");
}function method()
bar();
執行棧:
-console.log函式的執行上下文
-method函式的執行上下文
-foo函式的執行上下文
-bar函式的執行上下文
-棧底:全域性執行上下文
//永遠執行棧頂的上下文,執行完乙個就pop
執行上下文的內容
vo:variable object ,變數物件,存放的是函式或全域性**執行過程中需要用到的區域性變數
scope:作用域
this
vo是乙個物件,呼叫函式或執行全域性**時建立
function foo(a,b)
}foo(3,4);
foo函式的執行上下文建立過程:
bar:指向乙個函式}}
建立vo物件
1.確定形參值
2確定函式中所有的函式字面量宣告
1.該函式必須是字面量宣告,字面量宣告提取到vo後,該宣告失效
2如果當前vo**現同名屬性,直接覆蓋
3確定函式中所有的變數宣告(var).將其提取到上下文中,值為underdifined
1如果當前vo**現同名屬性,忽略
function foo(a,b)
var a=function()
a(); //b
var a=10;
console.log(a); //10
}
vo{
a:3,--》指向函式a--》指向函式b————》10
b:4,
}
var foo=1;
function bar()
console.log(foo); //10
}
var a=1;
function b()
}b();
console.log(a); //1 函式結束,執行上下文消失
console.log(foo); //fn指向c
var foo="a";
console.log(foo); // a
var foo=function()
console.log(foo); // fn指向函式b
foo(); //b
function foo()
console.log(foo); //fn指向b
foo(); //b
執行上下文
1.分類 位置 全域性 函式 區域性 2.全域性執行上下文 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 w...
this執行上下文
this的指向為 誰呼叫當前this所在的函式,this就指向誰。也就是說,當前呼叫函式的那個物件自身就是this,就是當前的執行上下文。被滑鼠事件,鍵盤事件等觸發的函式 叫做事件處理函式,事件處理函式的this指向事件源 觸發事件的節點 事件處理函式第乙個引數是事件物件 備註 有名函式的this指...
執行上下文
1.分類 位置 全域性 函式 區域性 2.全域性執行上下文 在執行全域性 前,將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined 新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 ...