zoukankan      html  css  js  c++  java
  • 不使用var定义变量和使用var的区别

      最基本的var关键字是上下文的,而不采用var是全局的这就不讨论了

      “不管是使用var关键字(在全局上下文)还是不使用var关键字(在任何地方),都可以声明一个变量”。这貌似一个错误的概念:任何时候,变量只能通过使用var关键字才能声明。

    a = 10;是一个赋值语句,仅仅是给全局对象window创建了一个新属性(但它不是变量)。“不是变量”并不是说它不能被改变,而是指它不符合ECMAScript规范中的变量概念,所以它“不是变量”。

    1 alert(a); // undefined
    2 alert(b); // b is not defined -->报错"b" 没有声明
    3 b = 10;
    4 var a = 20;

      我们可以看到,因为“b”不是一个变量,所以在这个阶段根本就没有“b”,“b”将只在代码执行阶段才会出现(但是在我们这个例子里,还没有到那就已经出错了)。

    让我们改变一下例子代码:

    1 alert(a); // undefined, 这个大家都知道,
    2 b = 10;
    3 alert(b); // 10, 代码执行阶段创建
    4 var a = 20;
    5 alert(a); // 20, 代码执行阶段修改

      其实就是变量声明提升的一个概念:第一个例子相当于这个

    1 var a;
    2 alert(a); // undefined
    3 alert(b); // b is not defined -->报错"b" 没有声明
    4 b = 10;
    5 a = 20;

      关于变量,还有一个特性就是不能用delete操作符直接删除变量属性。

     1 //window的属性可以直接删除
     2 a = 10;
     3 alert(window.a); // 10
     4 alert(delete a); // true
     5 alert(window.a); // undefined
     6 //变量不能被删除
     7 var b = 20;
     8 alert(window.b); // 20
     9 alert(delete b); // false
    10 alert(window.b); // still 20

      但是这个规则在有个上下文里不起走样,那就是eval上下文,变量没有{DontDelete}特性。

    1 eval('var a = 10;');
    2 alert(window.a); // 10
    3 alert(delete a); // true
    4 alert(window.a); // undefined
  • 相关阅读:
    sourcenav安装
    vim-addon-manager【转】
    zmq重点
    一个简单的解决方法:word文档打不开,错误提示mso.dll模块错误。
    微软验证码项目 Captcha Code Demo 从 .NET Core 1.1.2升级到2.1.0
    海康设备如何接入萤石开放平台
    ABP 启用多租户实现数据隔离
    Docker 开发者常用操作命令
    .NET Core 深度克隆对象,引用类型的平行世界
    详解 .NET Core 遍历 List 并移除项
  • 原文地址:https://www.cnblogs.com/cdwp8/p/4066193.html
Copyright © 2011-2022 走看看