一,局部变量先使用后声明,不影响外部同名变量
var x = 1; // --> 外部变量x function fn(){ alert(x); // --> undefined 局部变量x先使用 var x = 2; // 后声明且赋值 } fn(); alert(x); // --> 1
第一点,函数fn内第一句输出x,x是在第二句才定义的。这在js中是允许的,这里的允许是指不会出现语法错误程序可以运行。
但在其它语言如C,Java中却是不允许的。变量必须先声明后使用,如:
public class Test { public static void main(String[] args) { System.out.println(x); // 先使用 int x = 10; // 后声明 } }
Java中编译器会提示错误,程序无法运行。
第二点,函数fn内的局部变量x不会影响到外部的变量x。即fn内alert输出不是1,而是undefined。
二,形参优先级高于函数名
function fn(fn){ alert(fn); } fn('hello'); // --> "hello"
可以看到函数名和形参同名都是fn,输出的是字符串"hello",却不是函数fn的函数体(fn.toString())。
三,形参优先级高于arguments
function fn(arguments){ alert(arguments); } fn('hello'); // --> "hello"
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。
引用:
http://snandy.iteye.com/blog/812668
相关推荐
主要介绍了JavaScript中的同名标识符优先级。需要的朋友可以过来参考下,希望对大家有所帮助
JavaScript中的标识符的命名有以下规则: 由字母、数字、$、_组成 以字母、$、_开头 不可以使用保留字!!! 要有意义!!!!!!! 标识符的命名规范: 1.驼峰命名法 除标识符的第一个单词外,其余单词的首字母...
JavaScript中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。例如,乘法的执行先于加法。 下表按从最高到最低的优先级列出JavaScript...
javascript实现优先级计算器
JavaScript中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。例如,乘法的执行先于加法。下表按从最高到最低的优先级列出JavaScript...
JID JavaScript的XMPP标识符(JID) 爱丽丝@ wonderland.net / Rabbithole <本地> @ <域> / <资源>用法var jid = new JID ( 'alice' , 'wonderland.net' , 'rabbithole' )var jid = new JID ( 'alice@...
不能使用JavaScript中的关键字和保留字命名。 2.3.1 标识符 3、关键字 关键字:是指在JavaScript语言中被事先预定好并赋予特殊含义的单词。 保留字:是指预留的,未来可能会成为保留关键字的单词。 2.3.1 标识符 3...
javaScript 运算符优先级,javaScript 运算符优先级快速查询
标识符指的是javascript中定义的符号,标识符可以由任意顺序的大小写字母、数字、下划线和美元符号组成,但标识符不能以数字开头,也不能是javascript中的保留关键字。并且要注意,javascript是严格区分大小写的。
免费分享 自己写的 递归计算器 例如: 2+2/3+(33+6+(3-3*(33.44-4+(33*44.3/33+(333-33))))) 像这样的复杂运算,能够快速得出结果, 不调用系统的快速计算方法;...ps: javascript像这样复杂的连接公式 是得不出结果的;
que 快速javascript库,用于优先级队列,其下具有各种堆树
基本数据类型与常量 JavaScript中的标识符 如何将JavaScript嵌入网页
基于纯 JavaScript 的通用唯一标识符 (UUID) 抽象的 这是一个纯 JavaScript 和无依赖库,用于生成 DCE 1.1、ISO/IEC 11578:1996 和 IETF RFC-4122 兼容的通用唯一标识符 (UUID)。 它支持版本 1(基于时间和节点)、...
主要为大家介绍了javascript的变量与标识符,感兴趣的小伙伴们可以参考一下
主要介绍了IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理,需要的朋友可以参考下