“闭包是指有权访问另外一个函数做用域中的变量的函数”--《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]); //只接受两个参数,第一个参数执行环境,第二个是参数的数组
复制代码