返回首页 | 新开户送体验金的娱乐城

合作共赢、快速高效、优质的网站建设提供商

更多精品源码-尽在织梦模板-www.moke8.com

网站开发浅析JavaScript中的同名标识符优先级

时间:2017-09-20 编辑:admin

一,局部变量先运用后声明,不影响外部同名变量
代码如下:
var x = 1; // -- 外部变量x
function fn(){
alert(x); // -- undefined 局部变量x先运用
var x = 2; // 后声明且赋值
}
fn();
alert(x); // -- 1 BR

榜首点,函数fn内榜首句输出x,x是在第二句才界说的。这在JS中是答应的,这儿的答应是指不会呈现语法过错程序能够运转。

但在其它言语如C,中却是不答应的。变量有必要先声明后运用,如
代码如下:
public class Test {
public static void main(String[] args) {
System.out.println(x); // 先运用
int x = 10; // 后声明
}
}

中编译器会提示过错,程序无法运转。

第二点,函数fn内的局部变量x不会影响到外部的变量x。即fn内alert输出不是1,而是undefine**********>二,形参优先级高于函数名
代码如下:
function fn(fn){
alert(fn);
}
fn('hello'); // -- "hello"

能够看到函数名和形参同名都是fn,输出的是字符串"hello",却不是函数fn的函数体(fn.toString())。

三,形参优先级高于arguments
代码如下:
function fn(arguments){
alert(arguments);
}
fn('hello'); // -- "hello" BR

arguments目标能够直接在函数内运用,是言语自身供给的一个 特别标识符 。

这儿刚好将形参声明成与其同名。输出能够看到是"hello"而非"[object Object]",即形参arguments掩盖了言语自身供给的真实的arguments。

四,形参优先级高于只声明却未赋值的局部变量
代码如下:
function fn(a){
var a;
alert(a);
}
fn('hello'); // -- "hello"

函数fn形参为a,函数内榜首句仅声明局部变量a,却并未赋值。从输出成果是"hello"而非undefined能够看出形参a优先级高于仅声明却未赋值的局部变量a。

五,声明且赋值的局部变量优先级高于形参
代码如下:
function fn(a){
var a = 1;
alert(a);
}
fn('hello'); // -- "1"

函数fn形参为a,函数内榜首句仅声明局部变量a,赋值为1。从输出成果是"1"而非"hello"能够看出声明且赋值的局部变量a优先级高于形参a。

六,形参赋值给同名局部变量时
代码如下:
function fn(a){
var a = a;
alert(a);
}
fn('hello');

暂不运转,猜想下成果。如果依照第五点:声明且赋值的局部变量优先级高于形参。那么a将是undefined。但实际上a是"hello",即右a是形参a,左a才是局部变量a。

这儿的两个a互不搅扰,谁也没掩盖谁。这与刚刚说的赋值的局部变量优先级高于形参又对立了。但引擎这样做的确是我们们想要的,由于并不期望var a = a后a是undefined。
浏览:

网站建设

流程

    网站建设流程