作用域: (理解闭包的前提是先理解JavaScript的作用域)
JavaScript使用函数作用域而不是块级作用域,变量在声明他们的函数体嵌套的任意函数体内都是有定义的。
JavaScript的函数作用域是指:在函数内声明的所有变量在函数体内始终是可见的。 好的做法是将变量的声明都放到function的顶部,而不是将声明靠近放在使用变量之处。
function test(x) { var i = x; alert("j---"+j+"--k"+k); if(x == 0) { var j = 0; for(var k=0;k<10;k++) { document.writeln(k); j = k; } function inner() { return j + k; var j = 0; } alert("inner---"+inner()); alert(k); } j ++; alert("j---"+j); // j 和 k 之所以能被访问是因为"提前"到函数的顶部。 alert("k---"+k); } test(0);
// 函数定义语句, 函数名和函数体都会"提前"到脚本或函数的顶部。
fun(); // 不会报错
function fun() {
}
fun(); //会报错
//函数声明语句,只是fun这个变量"提前"了,函数体不会提前到顶部
var fun = function() {
}
----------------------------------------------------------------------------------------------------------------------------
undefined 有两种,一种是声明未赋值就使用 一种是没声明
alert(typeof s); // undefined,如果不用typeof则会报错,程序中止执行
var s;
alert(s); //undefined
null,是表示空值,可以理解为 null是程序级而undefined是系统级
var a = 1;
alert((a++)+a); // 3
eval(),它使用了调用它的变量作用域环境。尽可能的避免使用eval();
"use strict",指令说明(脚本或函数中)后续的代码将会解析为严格代码
时间: 2024-10-17 06:47:29