js中this的指向 作用域和閉包

2021-09-25 14:23:14 字數 1608 閱讀 2573

1、this在執行的時候才會確定指向的是什麼,不執行無法確定。

this的幾種不同的使用場景

建構函式

物件屬性

普通函式

建構函式:
this先指向乙個空物件,再對this賦值,最後返回this;

function foo(name);

this.name = name;

//return this;

}var a = new foo('gouhuan');

物件:
var a =

};a.printname();//a

這個時候this指向a物件,this === a;

普通函式:
this指向window;

function fn()

function fn1(name,age)

fn1('gouhuan');//window gouhuan

fn1.call(,'gouhuan',20);//,gouhuan

//注意傳參形式

---bind只能用於函式表示式,不可用於函式宣告;

var fn2 = function().bind()//;

js中沒有塊級作用域,只用函式和全域性作用域
if(1)

console.log(a);//100

乙個函式的作用域是在其定義是的作用域,而不是在其執行時的作用域。

閉包的使用場景

函式作為返回值

函式作為引數傳遞

function foo()

};//foo()返回乙個函式,所以此時f1為乙個函式;

var f1 = foo();

var a = 200;

f1();

這時f1()//100 而不是200 兩者毫無關係,f1它的父作用域為函式foo,foo中 a = 100,則f1中 a = 100;

函式作為引數傳遞
function foo()

}var f1=foo();//f1為函式

function f2(fn)

f2(f1);//100

對變數提示的理解
console.log(a);//undefined

var a=100;

這裡雖然一開始沒有定義 變數a,但是在宣告函式foo時,會將var a;提公升;即在宣告函式時,會將變數定義提前,

在js中,會將全域性變數,函式宣告提公升;

foo();//100;

function foo()

如何理解作用域

自由變數

作用域鏈,即如何尋找自由變數

必報的使用場景

js 作用域和閉包

作用域應用的特色情況,有兩種表現 自由變數的查詢,在函式定義的地方,向上級作用域查詢不是在執行的地方 函式作為返回值 function create const fn create const a 200 fn 100 函式作為引數 function print fn const a 100 fun...

js的作用域和閉包

1.作用域 乙個變數的可用範圍 全域性作用域 除了函式內,客廳 區域性作用域 函式內 小房間 全域性變數 在全域性作用域內宣告的變數 客廳裡面的東西 區域性變數 在區域性作用域內宣告的變數 你臥室裡面的東西 全域性作用域不能訪問區域性,區域性作用域可以訪問全域性 2.閉包 用來解決全域性汙染的,用來...

簡述JS作用域 作用域鏈和閉包

定義 乙個變數的作用域是程式源 中定義這個變數的區域。全域性變數擁有全域性作用域,區域性變數只有區域性作用域。塊級作用域 在es6 let變數宣告出來之前,js是沒有塊級作用域的概念的,函式內部定義的變數才是區域性變數,具體見下面的 var a 1 for var i 0 i 10 i functi...