首页 web前端 js教程 浅析JavaScript中的同名标识符优先级_javascript技巧

浅析JavaScript中的同名标识符优先级_javascript技巧

May 16, 2016 pm 05:10 PM
标识符

一,局部变量先使用后声明,不影响外部同名变量

复制代码 代码如下:

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。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C++报错:找不到标识符,怎么办? C++报错:找不到标识符,怎么办? Aug 22, 2023 am 10:45 AM

在使用C++编程语言开发程序时,经常会遇到“找不到标识符”的报错。这种报错信息通常意味着编译器无法找到某个变量、函数或类的定义。这篇文章将解释这种报错的原因,以及如何修复这种问题。找不到标识符的原因首先,让我们看一下为什么会出现“找不到标识符”的报错。这种报错通常有以下几种原因:1.1变量、函数或类没有被定义这是最常见的“找不到标识符”的原因之一。如果一个

c语言合法标识符的要求是什么 c语言合法标识符的要求是什么 Aug 27, 2020 pm 01:47 PM

c语言合法标识符的要求是:1、标识符只能由字母(A~Z, a~z)、数字(0~9)和下划线(_)组成;2、第一个字符必须是字母或下划线,不能是数字;3、标识符中的大小写字母是有区别的,代表不同含义;4、标识符不能是关键字。

理解 Go 标识符:从语法到语义 理解 Go 标识符:从语法到语义 Apr 07, 2024 pm 09:36 PM

在Go语言中,标识符用于命名实体,语法规则包括以字母或下划线开头,可以包含字母、数字或下划线,且不能是保留关键字。语义上,常量标识符以大写字母开头表示不变值,变量标识符以小写字母开头表示可变值,类型标识符以大写字母开头表示一组值,函数标识符以小写字母开头并通常冠以Func前缀。理解这些规则和语义对于创建清晰、可维护的代码至关重要。

javascript中标识符的含义是什么 javascript中标识符的含义是什么 Jun 15, 2021 pm 05:41 PM

在javascript中,标识符是指用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系;标识符通常由字母和数字以及其它字符构成。合法的标识符其第一个字符必须是字母、下划线或美元符号;且不能与JavaScript关键字、保留字重名。

在C语言中,什么是标识符? 在C语言中,什么是标识符? Sep 02, 2023 pm 10:09 PM

标识符用于程序中的任何变量、函数、数据定义、标签等。在开始任何语言之前,您至少必须知道如何命名标识符。在C语言中,标识符是字母数字字符的组合,即首先以字母或下划线开头,其余为字母、任意数字或下划线。标识符命名规则标识符命名必须遵循的规则如下-字母字符的大小写是重要的。例如,对变量使用“TUTORIAL”与对变量使用“tutorial”不同,也与对变量使用“TutoRial”不同。这三个变量都引用不同的变量。对于标识符的长度没有规定。如果标识符超过31个字符,我们可能会在某些编译器中遇到问题。对于

c语言标识符有哪些类型 c语言标识符有哪些类型 Nov 28, 2022 pm 07:03 PM

c语言标识符有三类:1、关键字,是由C语言规定的具有特定意义的字符串,通常也称为保留字;2、预定义标识符,是系统预先定义的标识符,如函数库中的函数名、宏定义和类型别名;3、用户定义标识符,是用户根据需要自己定义的标识符,一般用来给变量、函数、数组等命名。用户标识符如果与关键字相同,则编译时会出错;如果与预定义标识符相同,编译时不会出错,但预定义标识符的原意失去了。

Go 标识符使用指南:规约实践,优化代码 Go 标识符使用指南:规约实践,优化代码 Apr 07, 2024 pm 01:06 PM

Go标识符命名规则:标识符必须以字母或下划线开头,区分大小写,避免使用关键字。最佳实践包括使用驼峰表示法、避免缩写、遵循一致性。遵循这些规则可以优化代码的可读性、可维护性和质量,从而提高代码库的可理解性。

php中标识符允许出现的符号有哪些 php中标识符允许出现的符号有哪些 Sep 18, 2023 pm 02:20 PM

php中标识符允许出现的符号有字母、数字、下划线和中文字符。详细介绍:1、字母和数字,标识符可以由字母和数字组成,它们可以以字母开头,后面可以跟随任意数量的字母、数字或下划线;2、下划线,标识符可以包含下划线,但不能以下划线开头;3、中文字符,从PHP 7.2版本开始,允许在标识符中使用中文字符,$中文变量、function中文函数()等都是合法的标识符等等。

See all articles