1 console.log(parseInt(1e1)); 2 console.log(parseInt('1e1')); 3 console.log(parseFloat('1e1')); 4 console.log(isFinite(0/10)); 5 console.log(isFinite(20/0)); 6 console.log(isNaN(parseInt(NaN))); 7 8 9 var a = 1; 10 function f(){ 11 var a = 2; 12 function n(){ 13 alert(a); 14 } 15 n(); 16 } 17 f();
// 闭包2道练习题
// 第1道
let foo = function(){
let i = 0;
return function(){
console.log(i++);
}
}
let f1 = foo();
let f2 = foo();
f1();// 0
f2();// 0
f1();// 1
// 第2道
let x = 100;
let y = 200;
let funA = function(x){
x += 1;
let y = 201;
let funB = function(){
console.log(x); // 102
console.log(y); // 201
}
return funB;
}
let f = funA(101);
f();
10
1
10
true
false
true
alert(2);
JS与很多程序设计语言不同,它不存在大括号级的作用域,但它有函数作用域,也就是说,在函数
内定义的变量在函数外是不可见的。但如果该变量是在某个代码
块中定义的(如在某个if 或者 for语句中),它在代码块是可见的-
在JS中,每个函数都有一个自己的词法作用域 也就是说,每个函数在被定义时。(而非执行时)
都会创建一个属于自己的环境(即作用域)
当你看到 var a =2 可能认为这是一个声明 ,但JS实际上会看成两个声明
var = a a= 2
第一个声明会在编译阶段进行 第二个赋值 声明
会被留在原地等待执行阶段
先有蛋(声明) 后有鸡(赋值)
函数优先 变量
当函数 可以记住并访问所在的词法作用域时,就产生了闭包,即使 函数是在当前词法作用域之外执行
在定时器 事件监听器 使用了回调函数 实际上就是在使用闭包
(未完待续 )