1.函数可以嵌套,这样有助于寄生函数利用宿主函数的内部变量。
2.没有块级作用域。在函数内部任何位置生命的变量,都在整个函数内部有效。举例如下:
var s1 = "global";
function f1() {
alert(s1);
var s1 = "local";
alert(s1);
}
f1();
结果:
第一个alert结果为undfined
第二个alert结果为local
分析:
由于局部变量s1在整个函数范围内有效,因此隐藏了全局变量s1,但是在第一个alert调用时,局部变量s1尚未被复制,因此第一个alert结果为undfined。
上述代码作用等同于下列代码
var s1 = "global";
function f1() {
var s1;
alert(s1);
s1 = "local";
alert(s1);
}
f1();
3 无法修改对象(包含继承)的只读属性的值,举例如下
var o = {};
Object.defineProperty(o, "x", { value: 1, writable: true, enumerable: true, configurable: true}); //创建对象O的属性x,可写属性为false,即不可写
o.x = 2;
console.log(o.x); //依然是1
var p = Object.create(o);
p.x = 2;
console.log(p.x); //依然是1
Object.defineProperty(o, "x", { writable: true});//设置对象O的属性x,可写属性为true,即可写
o.x = 2;
console.log(o.x);//结果是2
var q = Object.create(o);
q.x = 2;
console.log(q.x);//结果是2