标签:作用域 有一个 还原 数组元素 字符 json def 实参 function
P146 非负整数索引被当做数组索引,其他被当做对象属性。数组索引仅是对象属性名的一种特殊形式,这意味着JS数组没有"越界"错误的概念。查询不存在属性返回undefiend。
a[-1.23] = true;//创建名为“-1.23”的属性
a["1000"] = 0;//数组的第1001个元素
a[1.000]//等价于a[1]
P147 足够稀疏的数组通常在实现上比稠密的数组更慢、内存利用率更高,在这样的数组中查找元素的时间与常规对象查找时间一样长。为什么?
? 在数组直接量中省略值时部位稀疏数组。省略值为undefined。可用in操作符监测两者区别:
a1 = [,,,];
a2 = new Array(3);
0 in a1;//true,a1在索引0处有一个元素undefiend,测试为false,省略值不存在 嗯?
0 in a2;//false
P161 类数组对象
p173 函数定义中使用注释optional来强调形参是可选的。
P174 通过实参对象(不是数组)arguments[num]获得传入的实参,length属性获得实参个数。可变长实参列表:
/*可变长实参列表,返回最大值为例:*/
function max(/*...*/){
var max = Number.NEGATIVE_INFINITY;
//遍历实参,查找并记住最大值
for(var i = 0; i < arguments.length; i++)
if (argument[i] > max) amx = argument[i];
return max;
}
var largest = max(1,1000,2,5000,4,5,6); // =>5000
P176 可将对象属性用作实参,为了实参不必按照顺序。
P182 闭包
var scope = "gloval scope"; //全局
function checkscope(){
var scope = "local scope"; //局部
function f(x){ return scoped; }
return f;
}
checkscope()() //返回"local scope"
词法作用域基本规则:JS函数的执行用到了作用域链,这个作用域链是函数定义的时候创建的。嵌套的韩式f(x)定义在这个作用域链里面,其中的变量scope一定是局部变量,不管在何时何地执行f(),这种绑定在其执行时依然有效。
Js词法作用域规则
1、函数允许访问函数外的数据
2、整个代码结构中只有函数可以限定作用域
3、作用域规则首先使用提升规则分析
4、如果当前作用域中有了该变量, 就不考虑外面的同名变量
标签:作用域 有一个 还原 数组元素 字符 json def 实参 function
原文地址:https://www.cnblogs.com/dxy9527/p/12179372.html