列子1:
var num = 10;
fun();
function fun() {
console.log(num);//undefined
var num = 20;
}
fun自己本身就有num所有不会访问父级,但是执行到console.log(num),num还未赋值所以是undefined。
列子2:
var a;
function f1() {
var b;
var a;
b = 9;
console.log(a);//undefined
console.log(b);//9
a = '123';
}
a = 18;
f1();
f1自己本身就有a所有不会访问父级,所以a是undefined。b是9.
列子3:
function f1(){
var a;
a=b=c=9;
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
f1();
console.log(c);//9
console.log(b);//9
console.log(a);//报错
a 局部变量,b 和c全局变量
列子4:
function fun(n) {
console.log(n);//0,1,2,3
return {
fun: function(m) {
console.log(m,n);//1 0,2 0,3 0
return fun(m, n);
}
}
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
a的值是fun: function(m) {。。。}这个整体
列子5:
var test = (function(a) {
this.a = a;
return function(b) {
console.log(a,b)// 1 4
return this.a + b;//1+4=5
}
})(function(a, b) {
console.log(a,b)// 1 2
return a;
}(1, 2));
console.log(test(4));//5
test的值是一个立即执行函数
列子6:
var x; // 声明 x
console.log(x); //undefined
console.log(typeof y); //undefined
console.log(z); //报错
列子7:
var foo = "function";
var foo;//它只是定义,全不会覆盖变量
alert(foo);//所以返回 function
列子8:
var getName = function(){
console.log(2);
}
function getName (){
console.log(1);
}
getName();//2
函数还整体提前,所以后面getName赋值时会覆盖所以结果是2;
列子9:
var x = 1;
var y = 0;
var z = 0;
function add(n){n=n+1;}
y = add(x);//undefined
function add(n){n=n+3;}
z = add(x);//undefined
都为undefined,因为没有返回值
列子10:
var x = 10;
var foo = {
x: 90,
getX: function() {
return this.x;
}
};
foo.getX(); // 90
var xGetter = foo.getX;
xGetter();//10
因为xGetter()的this的指向的是window,而foo.getX()的是本身;