JavaScript中同名标识符优先级
来源:互联网 发布:php cs fixer v2.phar 编辑:程序博客网 时间:2024/05/01 17:04
一,局部变量先使用后声明,不影响外部同名变量
1
2
3
4
5
6
7
var
x = 1;
// --> 外部变量x
function
fn(){
alert(x);
// --> undefined 局部变量x先使用
var
x = 2;
// 后声明且赋值
}
fn();
alert(x);
// --> 1<br>
第一点,函数fn内第一句输出x,x是在第二句才定义的。这在JS中是允许的,这里的允许是指不会出现语法错误程序可以运行。
但在其它语言如C,Java中却是不允许的。变量必须先声明后使用,如
1
2
3
4
5
6
public
class
Test {
public
static
void
main(String[] args) {
System.out.println(x);
// 先使用
int
x =
10
;
// 后声明
}
}
Java中编译器会提示错误,程序无法运行。
第二点,函数fn内的局部变量x不会影响到外部的变量x。即fn内alert输出不是1,而是undefined。
二,形参优先级高于函数名
1
2
3
4
function
fn(fn){
alert(fn);
}
fn(
'hello'
);
// --> "hello"
可以看到函数名和形参同名都是fn,输出的是字符串"hello",却不是函数fn的函数体(fn.toString())。
三,形参优先级高于arguments
1
2
3
4
function
fn(arguments){
alert(arguments);
}
fn(
'hello'
);
// --> "hello"<br>
arguments对象可以直接在函数内使用,是语言本身提供的一个 特殊标识符 。
这里刚好将形参声明成与其同名。输出可以看到是"hello"而非"[object Object]",即形参arguments覆盖了语言本身提供的真正的arguments。
四,形参优先级高于只声明却未赋值的局部变量
1
2
3
4
5
function
fn(a){
var
a;
alert(a);
}
fn(
'hello'
);
// --> "hello"
函数fn形参为a,函数内第一句仅声明局部变量a,却并未赋值。从输出结果是"hello"而非undefined可以看出形参a优先级高于仅声明却未赋值的局部变量a。
五,声明且赋值的局部变量优先级高于形参
1
2
3
4
5
function
fn(a){
var
a = 1;
alert(a);
}
fn(
'hello'
);
// --> "1"
函数fn形参为a,函数内第一句仅声明局部变量a,赋值为1。从输出结果是"1"而非"hello"可以看出声明且赋值的局部变量a优先级高于形参a。
六,形参赋值给同名局部变量时
1
2
3
4
5
function
fn(a){
var
a = a;
alert(a);
}
fn(
'hello'
);
- JavaScript中同名标识符优先级
- JavaScript中同名标识符优先级
- 【js】JavaScript中同名标识符优先级
- javascript 中的同名函数
- JavaScript中运算符的优先级
- JavaScript中运算符的优先级
- Javascript中变量函数申明优先级
- JavaScript中运算符的优先级
- JavaScript中运算符的优先级汇总
- javascript中运算符的优先级问题
- Javascript中变量函数申明优先级
- 继承中同名冲突
- JavaScript同名函数的调用
- JavaScript函数同名覆盖问题
- JavaScript 语句标识符
- JavaScript 语句标识符
- JavaScript中的查询标识符
- 【JavaScript的标识符】
- 如何把sql数据导出成脚本
- 安装 Python Imaging Library(PIL)
- Eclipse运行时提示failed to create the java virtual machine 如何解决
- 【C++ primer】第十七章 输入、输出和文件
- 对组员的工作是赞赏还是置若罔闻
- JavaScript中同名标识符优先级
- CPU 实模式 保护模式 和虚拟8086模式
- 项目管理知识笔记二:体系
- 搜狗浏览器的移一处异常情况
- 【编程珠玑】第四章 编写正确的程序
- 时区 和 时间
- 《认知与设计——理解UI设计准则》读书笔记
- 转载:哈希查找因何快?我们使用它需要付出什么代价
- ehcache缓存机制