JavaScript中同名标识符优先级
转:Snandy
JavaScript中同名标识符优先级
一,局部变量先使用后声明,不影响外部同名变量
但在其它语言如C,Java中却是不允许的。变量必须先声明后使用,如
第二点,函数fn内的局部变量x不会影响到外部的变量x。即fn内alert输出不是1,而是undefined。
二,形参优先级高于函数名
三,形参优先级高于arguments
这里刚好将形参声明成与其同名。输出可以看到是"hello"而非"[object Object]",即形参arguments覆盖了语言本身提供的真正的arguments。
四,形参优先级高于只声明却未赋值的局部变量
五,声明且赋值的局部变量优先级高于形参
六,形参赋值给同名局部变量时
这里的两个a互不干扰,谁也没覆盖谁。这与刚刚说的赋值的局部变量优先级高于形参又矛盾了。但引擎这样做的确是我们想要的,因为并不希望var a = a后a是undefined。
JavaScript中同名标识符优先级
一,局部变量先使用后声明,不影响外部同名变量
- 1 var x = 1; // --> 外部变量x
- 2 function fn(){
- 3 alert(x); // --> undefined 局部变量x先使用
- 4 var x = 2; // 后声明且赋值
- 5 }
- 6 fn();
- 7 alert(x); // --> 1<BR>
但在其它语言如C,Java中却是不允许的。变量必须先声明后使用,如
- 1 public class Test {
- 2 public static void main(String[] args) {
- 3 System.out.println(x); // 先使用
- 4 int x = 10; // 后声明
- 5 }
- 6 }
第二点,函数fn内的局部变量x不会影响到外部的变量x。即fn内alert输出不是1,而是undefined。
二,形参优先级高于函数名
- 1 function fn(fn){
- 2 alert(fn);
- 3 }
- 4 fn('hello'); // --> "hello"
三,形参优先级高于arguments
- 1 function fn(arguments){
- 2 alert(arguments);
- 3 }
- 4 fn('hello'); // --> "hello"<BR>
这里刚好将形参声明成与其同名。输出可以看到是"hello"而非"[object Object]",即形参arguments覆盖了语言本身提供的真正的arguments。
四,形参优先级高于只声明却未赋值的局部变量
- 1 function fn(a){
- 2 var a;
- 3 alert(a);
- 4 }
- 5 fn('hello'); // --> "hello"
五,声明且赋值的局部变量优先级高于形参
- 1 function fn(a){
- 2 var a = 1;
- 3 alert(a);
- 4 }
- 5 fn('hello'); // --> "1"
六,形参赋值给同名局部变量时
- 1 function fn(a){
- 2 var a = a;
- 3 alert(a);
- 4 }
- 5 fn('hello');
1.png (13.82 KB, 下载次数: 3)
这里的两个a互不干扰,谁也没覆盖谁。这与刚刚说的赋值的局部变量优先级高于形参又矛盾了。但引擎这样做的确是我们想要的,因为并不希望var a = a后a是undefined。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论