《黄金
密码》的第一篇文章:
js没有块级
作用域(可以通过自己或其他
方法关闭)。只有
函数级范围,函数可以在变量之外找到,函数内部的变量不能在外部找到。
第一次尝试:
为什么会这样
var a=10;
功能AAA(){ / / step-4
警报(一); / / step-5 ->
执行警戒,此时才
发现外面= 10,所以弹盒10
}
功能BBB(){ / / 2
var a=20;
AAA(); / / STEP - 3
}
/ /定义函数的调用是无用的,所以这里是步步房
血脑屏障(); / /步步
事实上,每个人都应该理解这个原则,它容易出错,从顶部改变。
二试:
为什么会这样因为当B被分配到A时,B还没有被定义,所以A是未定义的,B是10。
第二密码:
变量的查找是最近的原则,寻找var定义的变量,并在未找到的时候寻找外层。
看:
为什么会这样这其中有两个
原因,一是preparsing,和两个是附近
搜索。
var a=10;
函数AAA(){
警报(a);未定义的。当寻找A时,它会在函数中找到。由于预解析的功能,A在此时是未定义的,所以它永远不会寻找外部的10个。
var a=20;
前/分析
VaR
警报(a);
var = 20;*
}
(AAA);
注意:
这证实了第二个,虽然这是一个接近的规则,它的附近寻找var声明的变量,这是因为没有var声明的变量是全局的,它只能对A的值,上面的是因为一个VaR不在功能的发现,让我们去寻找它,一眼就找到它,所以会得到10的警戒;但是,后一个是20 = 20,的确,但警报尚未执行的。
看看它。
下面的示例是对js函数域的更
详细的验证:
这是因为在警报(a)时,A的BBB功能是20,但它是为警报(a)这一句是警报的一部分(A)找不到BBB函数的A,所以AAA函数找不到A,然后找出,查找,找到10。
金码第三:
当具有
本地变量名的
参数时,优先级是相同的。
例:
还有:当引用被传递时,基本
类型传递值,引用类型被引用。
var a=5;
var;
B+=3;
警报(a);5
var a = {1,2,3};
var;
B.push(4);
警报(一); / / {三};
上面的代码没有问题,但它不一样。
因为B是分配不点A.
此外,参数的范围类似于变量。
相比之下,这两个:
以上是参数是基本类型,并且只传递值,并传递以下类型的引用:(还包含重新分配的
情况)。