日期:2014-05-16 浏览次数:20422 次
作用域、闭包、模拟私有属性
先来简单说一下变量作用域,这些东西我们都很熟悉了,所以也不详细介绍。
var sco = "global"; //全局变量 function t() { var sco = "local"; //函数内部的局部变量 alert(sco); //local 优先调用局部变量 } t(); //local alert(sco); //global 不能使用函数内的局部变量
?
注意一点,在javascript中没有块级别的作用域,也就是说在java或c/c++中我们可以用"{}"来包围一个块,从而在其中定义块内的 局部变量,在"{}"块外部,这些变量不再起作用,同时,也可以在for循环等控制语句中定义局部的变量,但在javascript中没有此项特性:
function f(props) { for(var i=0; i<10; i++) {} alert(i); //10 虽然i定义在for循环的控制语句中,但在函数 //的其他位置仍旧可以访问该变量. if(props == "local") { var sco = "local"; alert(sco); } alert(sco); //同样,函数仍可引用if语句内定义的变量 } f("local"); //10 local local
?
?在函数内部定义局部变量时要格外小心: