精华内容
下载资源
问答
  • 为什么var可以重复声明

    千次阅读 2019-02-26 22:37:08
    答 因为编辑器会在判断有已经声明的同名变量时忽略var,然后直接赋值 原理 在JS代码运行过程中: ...当我们执行上面的代码时,我们可以简单的理解新变量分配一块儿内存,命名a,并赋值2,...

    因为编辑器会在判断有已经声明的同名变量时忽略var,然后直接赋值

    原理

    在JS代码运行过程中:

    • 引擎负责整个代码的编译以及运行
    • 编译器则负责词法分析、语法分析、代码生成等工作
    • 作用域负责维护所有的标识符(变量)。
    var a = 2;
    var a = 3;
    a = 4;
    alert(a); // 4
    

    当我们执行上面的代码时,我们可以简单的理解为新变量分配一块儿内存,命名为a,并赋值为2,但在运行的时候编译器与引擎还会进行两项额外的操作:判断变量是否已经声明

    1. 重复声明时:首先编译器对代码进行分析拆解,从左至右遇见var a,则编译器会询问作用域是否已经存在叫a的变量了。如果不存在,则招呼作用域声明一个新的变量a;若已经存在,则忽略 var 继续向下编译,这时 a = 2被编译成可执行的代码供引擎使用。
    2. 赋值时:引擎遇见a=2时同样会询问在当前的作用域下是否有变量a。若存在,则将a赋值为2(由于第一步编译器忽略了重复声明的var,且作用域中已经有a,所以重复声明会发生值的覆盖而不会报错);若不存在,则顺着作用域链向上查找,若最终找到了变量a则将其赋值2,若没有找到,则招呼作用域声明一个变量a并赋值为2(这就是为什么第二段代码可以正确执行且a变量为全局变量的原因,当然,在严格模式下JS会直接抛出异常:a is not defined)。
    展开全文
  • 那我们说说var重复定义变量的缺点吧。 假如多个人开发一个项目。都定义了一个变量a,但各自用途不同。这样var后面定义的a就会把前面定义的a覆盖。 而let就是用来解决这个问题,这也是let的意义所在。 var a = {}; a....
    var a = 1;
    var a = 2;
    

    为什么let连续声明两次会存在问题
    而var却可以呢???

    let b = 1;
    let b = 1;
    

    那我们说说var重复定义变量的缺点吧。
    假如多个人开发一个项目。都定义了一个变量a,但各自用途不同。这样var后面定义的a就会把前面定义的a覆盖。
    而let就是用来解决这个问题,这也是let的意义所在。

    var a = {};
    a.name = 'tianxia';
    a[age] = 18; // Uncaught ReferenceError: age is not defined
    
    展开全文
  • js中var重复声明

    千次阅读 2017-04-12 09:11:16
    腾讯的一个笔试题,先看一下var a = 100; function fn() { alert(a); //undefined var a = 200; alert(a); //200 } fn(); alert(a); //100 var a; alert(a); //100 var a = 300; alert(a); //300前两个很简单,不...

    腾讯的一个笔试题,先看一下

    var a = 100;
    function fn() {
        alert(a);   //undefined
        var a = 200;
        alert(a);   //200
    }
    fn();
    alert(a);   //100
    var a;
    alert(a);    //100
    var a = 300;
    alert(a);   //300

    前两个很简单,不解释 了,涉及到声明提前的问题。

    后面仨为啥呢,这要总结下重复声明的问题:
    1.使用var语句多次声明一个变量不仅是合法的,而且也不会造成任何错误.

    2.如果重复使用的一个声明有一个初始值,那么它担当的不过是一个赋值语句的角色.

    3.如果重复使用的一个声明没有一个初始值,那么它不会对原来存在的变量有任何的影响.

    展开全文
  • var b = 99;...//有人会有这样的疑惑,为什么第一个输出的是undefined而不是99呢 // 这又要谈到作用域了。 // 函数在执行时,会先在自己的函数体里查询变量,如果没有,才会一级一级往上查找。...

    var b = 99;

     

    function A(){

    console.log(b); //undefined

    var b = 15;

    console.log(b);

    }

     

    A();

     

    //有人会有这样的疑惑,为什么第一个输出的是undefined而不是99呢

    // 这又要谈到作用域了。

    // 函数在执行时,会先在自己的函数体里查询变量,如果没有,才会一级一级往上查找。函数fun()在执行时,输出第一个变量a是undefined是因为它现在自己的执行环境里查询到变量a已声明即变量提升(即变量可以提前声明但是赋值是不可以的),此时就输出了undefined。

    // 以上函数的原型实际是这样的:

     

    var b = 99;

     

    function A(){

    var b;

    console.log(b); //undefined

    b = 15;

    console.log(b); // 15

    }

     

    A();


     

    //变量变形

    function A(){

    console.log(a); //报错

    展开全文
  • Java 10中的var什么

    千次阅读 2021-02-26 13:04:44
    小编典典var 两种语言在概念上都有某种相似的目的,但有一些重要的区别。...程序员必须预先说出他们的变量可以容纳什么类型。它们可能像Object(每个类都Object隐式地扩展)一样宽容,或者像一样具体...
  • 前言 今天无意当中遇到了js中的变量声明,发现除了var居然还有let声明方法,比较新奇,特地记录下来它们两者的区别!绝对能让你理解清楚,PS 后面有重头戏 ...var 可以 let不可以。 a = 1; var ...
  • 轻松弄懂var、let、const之间的区别

    千次阅读 多人点赞 2020-01-08 14:16:01
    ES6的出现我们前端带来了很多方便之处,以前用js几十行才实现的一个功能,ES6几行代码就能简单的实现,ES6新增的一些特性,改变了很多弊端之处,比如新出现的let、const,实现了块级作用域功能,减少了以前var的...
  • 一些其他语言常见的小错误JS都能大度得包容,比如给一个方法传入超出预计的参数、在声明变量之前使用该变量(变量的声明提升解决了这个问题)等等,这里我们就要解剖一下JS变量重复声明以及当我们忽略var使用 ...
  • 本文向大家介绍稍许算法的实现:关于如何去除数组中的重复元素,并比较了两种算法之间的效率.全部代码在Xcode的Playground中实现,直观明了,适合Swift学习入门童鞋观赏. 有个前提 如题,很多童鞋立即给出解决方法,无...
  • jquery变量var的使用

    万次阅读 2018-11-11 08:24:26
    变量var的使用 js的变量没有类型 var $li = $('#' + file.id), $percent = $li.find('.progress span'); //console.log("percentage:", percentage); ...
  • JavaScript中let和var区别详解

    千次阅读 2020-07-06 15:10:05
    想要了解var(ES5)和let(ES6)区别,首先就要了解ES5下JS的变量提升 一、变量提升(声) 当浏览器开辟出供代码执行的栈内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前作用域中所有带var/...
  • 在讲let和var的区别前,我们先来了解一下JS中声明变量的几种方式 在ES6之前,常用的声明变量的方式 var 如: var a = 12; function 如: function A(){…},function是定义一个函数,实际上也相当于是创建变量的一...
  • 我们之前遇到过一个问题,日志文件把服务器空间占完了导致web服务不正常。 遇到问题——tomcat重新启动Insufficient space for shared .../var/log/messages – 包含整个系统的信息,包括系统启动期间被记录的日志...
  • let和var的区别是什么

    千次阅读 2018-03-05 15:55:50
    let是es6引入的他和var都是定义变量的,但是他们又是有区别的。1,var是最近的函数作用域,let的作用域是最接近的块作用域,这个比函数的作用域要小。2、当他们是全局变量时,let和var是相同的。当他们处在一个函数...
  • var与let,const的区别详解

    千次阅读 2019-06-20 16:17:44
    自从ES6新增后给前端的js代码书写带来很大的变化或者便利性。...2.不可以重复声明。 3.{}代表块级作用域,let有块级作用域,var只有函数作用域。 下面我们就一一举例来说明这些问题。 预解析问题: function sa...
  • ES6 let和var的区别是什么

    千次阅读 2018-09-03 21:59:33
    1.首先大概说下什么是ES6. 以前开发多少都是ES5,其中它里面包括很多特性,制定了许多语法规则。比如。解析规则,关键字,语法糖,闭包,继承,原型等等 而ES6简单的讲就是javaSeript的第6大版本,其中在ES5基础...
  • var 和 let详解

    千次阅读 2018-11-27 10:33:52
    ES6新增let命令,用来声明变量。... -var变量,无论var变量处于当前作用域的第几行,都将var变量提升到作用域的头部并初始化为undefine。  -let变量,let变量也被提升到当前作用域的头部,但不初始...
  • javaScript中var、let、const的区别

    千次阅读 2017-08-24 15:43:29
     之前我们在写js代码的时候都知道可以var定义全局变量和局部变量,也可以省略var,而且在非严格模式下不会报错,但是实际上在严格模式下,两者的使用有没有区别,可能很多人不清楚。 var x = 1; y = 2;  ...
  • let 和 const 以及var 区别

    千次阅读 2018-08-23 19:40:16
    ES5 只有全局作用域和函数作用域,没有块级作用域,这带来...它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 { let a =10; var b= 8; } console.log(a);//ReferenceError: a is not de...
  • JavaScript中var、let和const的区别

    万次阅读 多人点赞 2018-07-14 15:04:05
    一、前言在ES6(ES2015)出现之前,JavaScript中声明变量就只有通过 var 关键字,函数声明是通过 function 关键字,而在ES6之后,变量声明的方式有 var 、 let 、 const 、 function 、 class ,本文主要讨论 var ...
  • 在js中let与var声明变量的区别

    千次阅读 2019-05-17 13:55:39
    ES6 新增了let命令,用来声明局部变量,所声明的变量,只在let命令所在的代码块内有效,而且...ES6可以用let定义块级作用域变量 代码如下: function f1(){ { var a = 10; let b = 20; } console.log(a); //...
  • for循环中的var和let的区别

    千次阅读 2019-08-24 17:10:37
    for (var i = 0; i < 3; i++) { setTimeout(function () { console.log(i) // 3s 后输出 3次3 }, 30 * 100) console.log(i) // 先输出 0 1 2 } 1、这道题涉及到了异步、作用域、闭包: settimeout是异步...
  • layui文件上传重复问题

    千次阅读 2020-05-11 18:19:44
    upload.render({ elem:'#add_ppts' ,url:localStorage.getItem('url')+'/upload/upload/ppt_upload' ,accept:'video'//视频 ,choose:function(obj){ //varfiles=obj.pushFile(); ...
  • 理解var let const区别

    千次阅读 多人点赞 2020-04-05 14:13:34
    js中存在三种声明变量的方式 var let const,但是他们之间的区别很多却分不清 var var只有函数作用域,没有块作用域,可以声明全局/局部变量(在一共...可以重复定义,后定义的会覆盖先定义的 //3 var aaa; consol...
  • 在vue中let var 和const 区别

    万次阅读 2018-11-17 19:39:54
    有没有感觉到在 javascript 使用var会发生变量提升,即脚本开始运行时,  变量已经存在了,但是没有值,所以会输出undefined。  而let不会发生变量提升,这表示在声明它之前,变量是不存在的,这时如果用到它, ...
  • ES6中var/let/const的区别

    千次阅读 2017-07-13 11:38:48
    let的含义及let与var的区别:let 声明的变量只在它所在的代码块有效;如下:for (let i = 0; i ; i++) { console.log(i); } console.log('aaa'); console.log(i); // i is not defined上面代码中,计数器i只在for...
  • 之前我们在写js代码的时候都知道可以var定义全局变量和局部变量,也可以省略var,而且在非严格模式下不会报错,但是并不知道两者的区别... var x = 1; y = 4; console.log(x);//1 console.log(y);//4 console.log...
  • var let const声明变量的区别

    千次阅读 2019-01-13 18:27:25
    var varTest; let letTest; console.log(varTest); //输出undefined console.log(letTest); //输出undefined 也即是说声明后直接使用输出都是一样的undefined 二、使用未声明的变量,不同 console.log(varTest...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 402,101
精华内容 160,840
关键字:

为什么var可以重复