JavaScript中同名标识符的优先级分析
首先先用局部变量再声明,不影响同名外部变量的复制代码。代码如下: var x=1;//-外部变量x函数fn(){ alert(x);//-未定义的局部变量x首先使用var x=2;//声明并赋值} fn();警报(x);//-1br在第一点上,函数fn第一句中的输出x在第二句中定义。这在JS中是允许的,其中权限意味着程序可以在没有语法错误的情况下运行。但在C、Java等其他语言中是不允许的。使用前必须声明变量,例如,复制代码如下:公共类test { public static void main(string[]args){ system。out . println(x);//首先使用int x=10//Declare after } } Java中的编译器会提示错误,程序无法运行。第二,函数fn中的局部变量x不会影响外部变量x,即fn中的预警输出不是1,而是未定义。第二,参数优先级高于函数名。复制代码如下: function fn(fn){ alert(fn);} fn(' hello ');//-‘hello’可以看到函数名和形式参数都和fn同名,输出字符串‘hello’不是函数fn的函数体(fn.toString())。第三,参数优先级高于参数。复制代码如下:函数fn(参数){alert(参数);} fn(' hello ');///“hello”brarguments对象可以直接在函数中使用,并且是语言本身提供的特殊标识符。这里,形式参数被声明为具有相同的名称。您可以看到输出是“hello”而不是“[object Object]”,即形式参数覆盖了语言本身提供的真实参数。4.复制参数优先级高于只声明不赋值的局部变量的代码如下: function fn(a){ var a;警报(a);} fn(' hello ');//-‘hello’函数fn有一个形式参数,函数中的第一句话只声明了局部变量a,但没有赋值。从“hello”而不是undefined的输出结果可以看出,参数A的优先级高于只声明不赋值的局部变量A。五、声明赋值局部变量的优先级高于形式参数的复制码。代码如下: function fn(a){ var a=1;警报(a);} fn(' hello ');//-'1 '函数fn的形式参数是a,函数中的第一句话只声明局部变量a,值为1。从“1”而不是“hello”的输出结果可以看出,声明和赋值的局部变量A的优先级高于形式参数A.第六,当参数赋给同名局部变量时,复制代码如下: function fn(a){ var a=a;警报(a);} fn(' hello ');先别跑,猜结果。根据第五点:声明和赋值的局部变量比形式参数具有更高的优先级。那么a将是未定义的。其实a是‘hello’,也就是右边的a是形式参数a,左边的a是局部变量a.
这里的两个A互不干扰,也不覆盖对方。这与局部变量的优先级高于形式参数的说法相矛盾。但是引擎会做我们想做的事情,因为我们不想让a在var a=a之后未定义
版权声明:JavaScript中同名标识符的优先级分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。