Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。

var num = 1;

是在当前域中声明变量. 如果在方法中声明,则为局部变量(local variable);如果是在全局域中声明,则为全局变量。

而 num = 1;

事实上是对属性赋值操作。首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc。。。)中解析 num; 如果在任何当前作用域链中找到num,则会执行对num属性赋值; 如果没有找到num,它才会在全局对象(即当前作用域链的最顶层对象,如window对象)中创造num属性并赋值。

注意!它并不是声明了一个全局变量,而是创建了一个全局对象的属性。

    即便如此,可能你还是很难明白“变量声明”跟“创建对象属性”在这里的区别。事实上,Javascript的变量声明、创建属性以及每个Javascript中的每个属性都有一定的标志说明它们的属性----如只读(ReadOnly)不可枚举(DontEnum)不可删除(DontDelete)等等。

由于变量声明自带不可删除属性,比较var num = 1 跟 num = 1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。

具体见以下代码:

                    // num1为全局变量,num2为window的一个属性var num1 = 1;num2 = 2;// delete num1;  无法删除// delete num2;  删除function model(){var num1 = 1; // 本地变量
num2 = 2;     // window的属性// 匿名函数
(function(){var num = 1; // 本地变量
num1 = 2; // 继承作用域(闭包)
num3 = 3; // window的属性
}())}        

PS. 在ECMAScript5标准中,有一种“严格模式”(Strict Mode)。在严格模式中,为未声明的标识符赋值将会抛引用错误,因此可以防止意外的全局变量属性的创造。目前一些浏览器的新版本已经支持。

Javascript 声明时用“var”跟不用var的区别相关推荐

  1. 在Javascript中 声明时用var与不用var的区别,== 和 ===的区别

    今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var&qu ...

  2. JavaScript中用var和不用var的区别

    Javascript声明变量的,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. varnum=1; 是在当前域中声 ...

  3. Javascript全局变量var与不var的区别深入解析

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍了Javascript全局变量var与不var的区别.需要的朋友可以过来参考下,希望对大家有所帮助 相信你对全 ...

  4. Javascript 笔记与总结(2-6)var

    [例] <script> window.str = 'abc';function t1(){function t2(){str = 'xyz';alert(str);}t2(); }t1( ...

  5. JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)

    JavaScript重难点解析1(数据类型) var.let.const区别: 类型补充 "==="."typeof"."instanceof&quo ...

  6. Javascript中函数中定义变量无var

    参考: https://wiki.jikexueyuan.com/project/brief-talk-js/about-var.html 前段时间回答了一个关于定义变量时使用关键字 var 与否的区 ...

  7. java 全局变量_Javascript中的局部变量、全局变量的详解与var、let的使用区别

    前言 Javascript中的变量定义方式有以下三种方式: 1.直接定义变量,var与let均不写: a = 10; 2.使用var关键字定义变量 var a = 10; 3.使用let关键字定义变量 ...

  8. js中加“var”和不加“var”的区别,看完觉得这么多年js白学了

    Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...

  9. Javascript——声明提升(函数、变量提升)

    文章目录 一. 声明提升 1.1 示例讲解(变量提升) 1.2 示例讲解(函数提升) 二.解决方案 2.1 使用赋值 详解 三.exercise 一. 声明提升 声明提升是JavaScript中的一个 ...

最新文章

  1. UOJ【UR #12】实验室外的攻防战
  2. 手机屏幕适配遇到虚拟键的问题
  3. datasg中数据的存储结构
  4. Linux C 深入分析结构体指针的定义与引用
  5. python3安装cx oracle,[求助]python3安装cx_Oracle 报错
  6. linux awk 管道,shell使用管道,配合awk,一句代码清空大于设定大小的日志文件
  7. 以太坊geth区块链私链建立
  8. SPI TFT液晶屏与Arduino Uno 连接
  9. 网站打不开的原因及解决办法
  10. 英语语法快速入门3--名词性从句(附思维导图)
  11. Android实例精讲——通过ListView构造微信聊天界面视图
  12. Mybatis官方网站
  13. 酬乐天扬州初逢席上见赠
  14. windows聚焦壁纸不更新_Win10系统下聚焦锁屏壁纸无法自动更换怎么解决
  15. CH9101芯片应用—硬件设计指南
  16. 利用网络,下载网络资源
  17. 电商详情页缓存架构(一)电商网站的商品详情页架构
  18. oracle的weekday函数,VB weekday()函数的用法?
  19. 最新饿了么电脑脚本+获取cookie教程+代挂
  20. 高精密库仑计DS2740驱动程序

热门文章

  1. Java(二十二) -- 生产者消费者模式
  2. 从写简历,到面试、谈薪酬的那些技巧和防坑指南
  3. [WPF 如何] 如何向 ComboBox 添加一个空白选项
  4. java中使用poi导出ppt(图片和表格)
  5. 精品绿色便携软件 录制操作工具
  6. 软件工程基础课-个人项目-数独
  7. 安卓9.0刷linux,Android 9.0 内核编译实战(以一加6为例)
  8. Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!
  9. MySQL 8.0 新特性之哈希连接(Hash Join)
  10. 学术论文等级划分(包括EI会议论文)