浅析JavaScript中的同名标识符优先级
JavaScript 浅析 优先级 标识符 同名
2023-06-13 09:15:13 时间
一,局部变量先使用后声明,不影响外部同名变量
varx=1;//-->外部变量x
functionfn(){
alert(x); //-->undefined局部变量x先使用
varx=2;//后声明且赋值
}
fn();
alert(x);//-->1<BR>
第一点,函数fn内第一句输出x,x是在第二句才定义的。这在JS中是允许的,这里的允许是指不会出现语法错误程序可以运行。
但在其它语言如C,Java中却是不允许的。变量必须先声明后使用,如
publicclassTest{
publicstaticvoidmain(String[]args){
System.out.println(x);//先使用
intx=10;//后声明
}
}
Java中编译器会提示错误,程序无法运行。
第二点,函数fn内的局部变量x不会影响到外部的变量x。即fn内alert输出不是1,而是undefined。
二,形参优先级高于函数名
functionfn(fn){
alert(fn);
}
fn("hello");//-->"hello"
可以看到函数名和形参同名都是fn,输出的是字符串"hello",却不是函数fn的函数体(fn.toString())。
三,形参优先级高于arguments
functionfn(arguments){
alert(arguments);
}
fn("hello");//-->"hello"<BR>
arguments对象可以直接在函数内使用,是语言本身提供的一个特殊标识符。
这里刚好将形参声明成与其同名。输出可以看到是"hello"而非"[objectObject]",即形参arguments覆盖了语言本身提供的真正的arguments。
四,形参优先级高于只声明却未赋值的局部变量
functionfn(a){
vara;
alert(a);
}
fn("hello");//-->"hello"
函数fn形参为a,函数内第一句仅声明局部变量a,却并未赋值。从输出结果是"hello"而非undefined可以看出形参a优先级高于仅声明却未赋值的局部变量a。
五,声明且赋值的局部变量优先级高于形参
functionfn(a){
vara=1;
alert(a);
}
fn("hello");//-->"1"
函数fn形参为a,函数内第一句仅声明局部变量a,赋值为1。从输出结果是"1"而非"hello"可以看出声明且赋值的局部变量a优先级高于形参a。
六,形参赋值给同名局部变量时
functionfn(a){
vara=a;
alert(a);
}
fn("hello");
暂不运行,猜测下结果。如果按照第五点:声明且赋值的局部变量优先级高于形参。那么a将是undefined。但实际上a是"hello",即右a是形参a,左a才是局部变量a。
这里的两个a互不干扰,谁也没覆盖谁。这与刚刚说的赋值的局部变量优先级高于形参又矛盾了。但引擎这样做的确是我们想要的,因为并不希望vara=a后a是undefined。
相关文章
- javascript 高级教程 视频_精通JavaScript
- JavaScript阶乘算法[通俗易懂]
- javascript飞机大战游戏_javascript游戏开发
- 经常会采坑的javascript原型应试题
- JavaScript案例:下拉菜单
- JavaScript学习总结(五)——Javascript中==和===的区别详解编程语言
- javascript原型链理解详解编程语言
- Javascript事件捕获的备忘(setCapture,captureEvents)
- Javascript常用运算符(Operators)-javascript基础教程
- 初学JavaScript第一章
- JavaScript验证浏览器是否支持javascript的方法小结
- javascript三级下拉选择菜单Levels对象
- javascript文章截取部分无损html显示实现代码
- javascript弹出窗口中是否显示地址栏的实现代码
- Javascript异步加载详解(浏览器在javascript的加载方式)
- JavaScript和Java的区别浅析
- 细说javascript函数从函数的构成开始
- 浅析JavaScript中的常用算法与函数
- 探讨javascript是不是面向对象的语言
- 浅析JavaScript中的类型和对象
- JavaScript判断变量是否为undefined的两种写法区别
- 浅析JavaScript中的隐式类型转换
- JavaScript模块随意拖动示例代码
- 浅析JavaScript基本类型与引用类型
- javascript中attribute和property的区别详解
- javascript常用函数归纳整理
- 浅析javascript的间隔调用和延时调用
- 浅析javascript定时器
- 浅析Javascript中“==”与“===”的区别