this指標的問題

2021-09-25 22:15:20 字數 1229 閱讀 4459

let宣告變數會形成塊級作用域,且不存在宣告提公升,而var存在宣告提公升。所以當使用let宣告變數時,不存在宣告提公升,length屬性實際上並沒有新增到window物件中。從下面的例子可以看出

是不是奇怪為啥輸入(fn,1)兩個引數,是不是賊奇怪為什麼不是10和5或者5和5??哈哈,慢慢解釋。

最先我以為是形參與實參的問題,但是後來發現不是這樣,於是去跑了個例子

var length = 10;

function fn()

var obj = };

obj.method();

上面例子的**執行後,輸出依然是10。如果按照之前實參與形參的想法,輸出應該是5的,所以與形參和實參沒有關係。這裡的this繫結到了全域性物件上,即window物件上。

var length = 10;

function fn()

var obj = };

obj.method();

當我利用call方法改變this的繫結後,輸出就是5了,說明this繫結到了obj物件上。

此時這個問題就需要回到那句"this永遠指向呼叫他的物件"話了,在執行obj.method()方法時,如果函式內部有this,則this確實是指向obj,但是method()內部執行的是fn()函式,而fn()函式繫結的物件是window,即window.fn()。還是用例子來說明。

var length = 10;

function fn()

var obj = };

obj.method();//輸出5 10

然後別忘了全域性函式fn同時也屬於arguments陣列中的一員,即當作為arguments成員之一呼叫的時候,其作用域就繫結到了arguments上,this也就是指向了arguments物件,所以arguments0這段**呼叫了身為成員的fn()函式,this.length就等於是arguments.length,又因為method傳入的引數為2個,所以最後輸出

指標的問題

我們都知道指標是用來操作記憶體空間的,我們可以簡單的拿來改變某個變數的值 如 我們定義乙個int a 5 然後定義乙個指標int p 將change a 利用這個呼叫函式change 用函式int change int p 輸出結果會是 a 10 這就是利用乙個簡單的指標來改變了記憶體空間的值將5 ...

指標的指向問題

最近開始複習資料結構,寫了個測試程式時發現了乙個問題。typedef struct lnode lnode,linklist int main lnode l initlist l void initlist linklist pl pl linklist malloc sizeof lnode p...

指標 1的問題

指標 1 並不是指標代表的位址值 1.char a a char p a cout void p void p 1 輸出 0012ff33 0012ff34 p指向的是乙個字元,p 1就是移動乙個字元大小,乙個字元就是乙個位元組,所以p 1 代表的位址就比 p 代表的位址大1。int i 1 int...