「閉包是指有權訪問另外一個函數做用域中的變量的函數」--《JavaScript高級程序設計》javascript
function foo(){
var a = "test";
function bar(){
return a;
}
return bar();
}
//如今回頭再看看閉包的定義:)
var b = foo();
bar(); //a
複製代碼
/* * 題目: * 完善工廠函數 createPerson,須要完成如下要求: * 1.保存傳入參數 name 到一個私有變量中 * 2.函數返回一個對象,且對象帶有一個方法 getName,用於返回對象的私有變量 name 的值 */
function createPerson(name) {
var n = name;
var result = {
getName : function(){
return n;
}
}
return result;
}
var person = createPerson('web');
console.log(person.name); //你什麼都得不到的,相信我
console.log(person.getName());
複製代碼
this其實指的就是函數的執行環境,看下面一段代碼java
window.name = "web";
var o = {
name : "test"
};
function sayName(){
console.log(this.name);
}
sayName(); //web,執行環境windows
o.sayName = sayName;
o.sayName(); //test,執行環境o
複製代碼
1.this並非聲明函數時就已經肯定的,調用時纔會肯定this的取值
2.全局環境下執行函數this通常指向window,對象的方法通常指向對象
複製代碼
window.name = "web";
var o = {
name : "test"
};
function sayName(){
console.log(this.name);
}
o.sayName = sayName.bind(window);
o.sayName(); //web,執行環境window
複製代碼
window.name = "web";
var o = {
name : "test"
};
function sayName(){
console.log(this.name);
}
sayName.call(o); //test,執行環境o
sayName.apply(o); //test,執行環境o
複製代碼
sayName.call(o,1,2,3); //正常傳參
sayName.apply(o,[1,2,3]); //只接受兩個參數,第一個參數執行環境,第二個是參數的數組
複製代碼