Javascript 声明时用“var”跟不用var的区别
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的区别相关推荐
- 在Javascript中 声明时用var与不用var的区别,== 和 ===的区别
今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var&qu ...
- JavaScript中用var和不用var的区别
Javascript声明变量的,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. varnum=1; 是在当前域中声 ...
- Javascript全局变量var与不var的区别深入解析
2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍了Javascript全局变量var与不var的区别.需要的朋友可以过来参考下,希望对大家有所帮助 相信你对全 ...
- Javascript 笔记与总结(2-6)var
[例] <script> window.str = 'abc';function t1(){function t2(){str = 'xyz';alert(str);}t2(); }t1( ...
- JavaScript重难点解析1(数据类型——var、let、const区别,类型补充,“===”、“typeof”、“instanceof”区别,Symbol数据类型)
JavaScript重难点解析1(数据类型) var.let.const区别: 类型补充 "==="."typeof"."instanceof&quo ...
- Javascript中函数中定义变量无var
参考: https://wiki.jikexueyuan.com/project/brief-talk-js/about-var.html 前段时间回答了一个关于定义变量时使用关键字 var 与否的区 ...
- java 全局变量_Javascript中的局部变量、全局变量的详解与var、let的使用区别
前言 Javascript中的变量定义方式有以下三种方式: 1.直接定义变量,var与let均不写: a = 10; 2.使用var关键字定义变量 var a = 10; 3.使用let关键字定义变量 ...
- js中加“var”和不加“var”的区别,看完觉得这么多年js白学了
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...
- Javascript——声明提升(函数、变量提升)
文章目录 一. 声明提升 1.1 示例讲解(变量提升) 1.2 示例讲解(函数提升) 二.解决方案 2.1 使用赋值 详解 三.exercise 一. 声明提升 声明提升是JavaScript中的一个 ...
最新文章
- UOJ【UR #12】实验室外的攻防战
- 手机屏幕适配遇到虚拟键的问题
- datasg中数据的存储结构
- Linux C 深入分析结构体指针的定义与引用
- python3安装cx oracle,[求助]python3安装cx_Oracle 报错
- linux awk 管道,shell使用管道,配合awk,一句代码清空大于设定大小的日志文件
- 以太坊geth区块链私链建立
- SPI TFT液晶屏与Arduino Uno 连接
- 网站打不开的原因及解决办法
- 英语语法快速入门3--名词性从句(附思维导图)
- Android实例精讲——通过ListView构造微信聊天界面视图
- Mybatis官方网站
- 酬乐天扬州初逢席上见赠
- windows聚焦壁纸不更新_Win10系统下聚焦锁屏壁纸无法自动更换怎么解决
- CH9101芯片应用—硬件设计指南
- 利用网络,下载网络资源
- 电商详情页缓存架构(一)电商网站的商品详情页架构
- oracle的weekday函数,VB weekday()函数的用法?
- 最新饿了么电脑脚本+获取cookie教程+代挂
- 高精密库仑计DS2740驱动程序
热门文章
- Java(二十二) -- 生产者消费者模式
- 从写简历,到面试、谈薪酬的那些技巧和防坑指南
- [WPF 如何] 如何向 ComboBox 添加一个空白选项
- java中使用poi导出ppt(图片和表格)
- 精品绿色便携软件 录制操作工具
- 软件工程基础课-个人项目-数独
- 安卓9.0刷linux,Android 9.0 内核编译实战(以一加6为例)
- Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!
- MySQL 8.0 新特性之哈希连接(Hash Join)
- 学术论文等级划分(包括EI会议论文)