当函数的参数是简单数据类型时(number,bool,string),在函数体中改变函数参数的值,没有意义,改动不会生效。函数的参数是复杂数据类型时(array,object)时,虽然对函数参数进行改动,可以生效,但也应该尽量避免。
闭包和匿名函数容易搞混,闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。
this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。 (《JavaScript高级程序设计》 p 180)
var AB = function(cd) {
var ef = 1;
this.hg = 4;
var that = {
gh:2
};
that.parent = this;
return that;
}
var ab = AB(3);
console.log(ab.gh);
console.log(ab.parent.ef);
console.log(ab.parent.cd);
console.log(ab.parent.hg);
var A = function (a) {
a = 20;
}
var a1 = 1;
A(a1);
console.log(a1);
//this
function foo() {
console.log(this.a);
}
foo();
var obj = {
a: 10,
f: foo
}
obj.f();
//闭包
function foo1(a) {
var b = 100;
return function () {
var that = {
getA: function () {
return a;
},
getB: function () {
return b;
},
setB: function (v) {
b = v;
}
};
return that;
}
}
var foo2 = foo1(50);
console.log(foo2().getA());
console.log(foo2().getB());
foo2().setB(1000);
console.log(foo2().getB());