</pre><p>1.</p><p></p><pre name="code" class="javascript">var bb = 1;
function aa(bb) {
bb = 2;
alert(bb);
};
aa(bb);
alert(bb);
// 2 1
当时犯了个错误,以为aa()里面对bb赋值,全局变量bb就改变了。这里要注意bb是函数的参数
var bb = 1;
function aa(value) {
value = 2;
alert(value);
}
aa(bb);
alert(bb);
这样就能很清楚的看到,改变的是函数的参数,而不是全局变量
2.
function Foo() {
var i = 0;
return function() {
console.log(i++);
}
}
var f1 = Foo(),
f2 = Foo();
f1();
f1();
f2();
// 0 1 0还是没弄懂,闭包常驻内存。为什么f1()和f2()不是公用一份i
3.
if(! "a" in window){
var a = 1;
}
alert(a); // undefined
这题考的是变量前置。
!的优先级比in大,所以!'a'先转为false,再false in window,而不是!('a' in window)
虽然没有进入if{}里,但是变量声明被提前了
4.
var f = function g() {
return 23;
};
typeof g();// g is not defined
犀牛书P166页。对函数表达式来说,函数名是可选的,如果存在,该名字只存在函数体中。
所以这个是有函数名的函数表达式