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

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)。在严格模式中,为未声明的标识符赋值将会抛引用错误,因此可以防止意外的全局变量属性的创造。目前一些浏览器的新版本已经支持。

转载于:https://www.cnblogs.com/liuna/p/6140901.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决方案_智能工厂全套解决方案

最近弱电社群资料更新情况:1、弱电学习圈VIP群资料整理-希望对您有用!2、弱电学习圈VIP技术交流2群成立,欢迎您加入!3、智慧校园整体解决方案!4、智能化弱电项目管理表单大全-弱电项目经理必备!5、弱电项目…

退火算法 贪婪算法_算法贪婪策略简介

退火算法 贪婪算法介绍 (Introduction) The solution is determined by a sequence of steps each step has given a particular solution and later a complete solution to given the problem can be achieved. In short, while making a choice there should be a greed for…

windows 2008 R2系统安装拨号v p n详细配置

windows 2008 R2系统单网卡安装拨号v p n系统环境:windows 2008 R2操作步骤首先设置服务端在服务器管理器中添加角色“网络策略和访问服务”,并安装以下角色服务右击路由与远程访问,选择“配置并启用路由和远程访问”右击路由与远程访问&…

python—函数

1. 函数的定义: 1 . 含义:我们把实现某一功能的代码定义为一个函数,在需要使用时,随时调用,十分方便。对于函数,简单理解就是可以完成某功能的代码块,可反复使用。 Python提供了许多内建函数&a…

word打开老是配置进度_小白教程 | office出现配置进度框,怎么办?

最近很多同学在备考二级时候,自己的电脑上office软件Word或者Excel出问题了,每次打开都会出现配置进度框。这种情况怎么办呢?这种情况都是注册表的问题,马上安排解决之前在 右键菜单没有office新建怎么办(点击即可阅读)也是用注册…

【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~...

一、写在前面 自使用android studio开始,就被它独特的依赖方式:compile com.android.support:appcompat-v7:25.0.1所深深吸引,自从有了它,麻麻再也不用担心依赖第三方jar包繁琐无趣啦。而,如果自己写一个开源库是一种怎…

scala集合中添加元素_如何在Scala中获得列表的第一个元素?

scala集合中添加元素清单 (List) A list is a linear data structure. It is a collection of elements of the same data types. 列表是线性数据结构。 它是相同数据类型的元素的集合。 Scala libraries have many functions to support the functioning of lists. Methods l…

python—列表、字典生成式

1 列表生成式 Python内置的一种极其强大的生成列表 list 的表达式。返回结果必须是列表。 示例: 需求1:接收变量 k a b s 51 5000 10000 a s.split() li [] for item in s.split():li.append(int(item)) k,a,b li print(k,a,b)运行结果:…

excel数据平均分配给多人_excel表格 怎样均分数据-用Excel怎么才能将组数据平均分配给几个人...

怎样在Excel表格中求平均数?在excel中怎样自动生成各班各科的平均成绩可以调用Excel函数库的函实现。步骤如下:1. 在单元格内点击上公式-平均值”。2. 点击需要参与计算的单元格数据,符号用键盘输入,最后回车即可。百度百科-Excel函数exce…

Java中List和Map接口之间的区别

列表与地图界面 (List vs Map interface) Here, we will see how List differs from Map interface in Java and we will see the points given below, 在这里,我们将看到List与Java中的Map接口有何不同,并且我们将看到以下几点, 列表界面 (…

python—高阶函数

什么是内置高阶函数: 一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。 Python中内置了几个常用的高阶函数,…

功能区不显示工具条_【新老客户必知】软件支持超高清屏显示器了

随着计算机硬件的不断更新换代显示设备的不断更新从原来的分辨率640 X 480啥原来分辨这么低呀?还记得DOS吗?或者Win95,win98吗当时显示器分辨率能调到800X 600很好了2000年左右随着纯平显示器的推出也有了高清显示器的概念那么一般我们说的高清显示器分辨…

nginx1.10.2源码安装配置参数参考

[rootlocalhost nginx-1.10.2]# ./configure --help--help print this message--prefixPATH set installation prefix #Nginx安装的根路径,默认为 /usr/local/nginx。--sbin-pathPATH set nginx binary pathname #指定nginx二进制文件的路径,默认为PATH/sbin/n…

c ++查找字符串_C ++朋友功能| 查找输出程序| 套装1

c 查找字符串Program 1: 程序1&#xff1a; #include <iostream>using namespace std;class Sample {int A, B;friend void fun();};void fun(){Sample S;S.A 10;S.B 20;cout << S.A << " " << S.B << endl;}int main(){fun();retu…

Spring定时器的运用

为什么80%的码农都做不了架构师&#xff1f;>>> 一、spring4定时器任务配置如下&#xff1a; <bean id"jsapiTask" class"chan.ye.dai.wexin.JsapiTicketTimeTask" /><bean id"jobDetail"class"org.springframework.s…

python—装饰器

装饰器概念&#xff1a; 把一个函数当作参数传递给一个函数&#xff0c;返回一个替代版的函数 本质上就是一个返回函数的函数 在不改变原函数的基础上&#xff0c;给函数增加功能 python 中装饰器做的事情&#xff01;它们封装一个函数&#xff0c;并且用这样或者那样的方式来修…

ad18原理图器件批量修改_Altium Designer 15原理图设计基础

Altium Designer 15成为越来越多电子设计开发工程师EDA电路设计软件的首选&#xff0c;在学校学习Altium Designer的也越来较多&#xff0c;像单片机开发学习一样&#xff0c;EDA设计只要学会了&#xff0c;再学其他的设计软件就容易多了。上一节分享了《Altium Designer 15集成…

c++freopen函数_使用示例的C语言中的freopen()函数

cfreopen函数C语言中的freopen()函数 (freopen() function in C) Prototype: 原型&#xff1a; FILE* freopen(const char *str, const char *mode, FILE *stream);Parameters: 参数&#xff1a; const char *str, const char *mode, FILE *streamReturn type: FILE* 返回类型…

python—文件

1 . 文件的基本操作&#xff1a; 文件读取三部曲&#xff1a; 打开操作关闭&#xff08;如果不关闭会占用文件描述符&#xff09; 打开文件&#xff1a; f open(/tmp/passwdd,w)操作文件&#xff1a; 1 . 读操作&#xff1a; f.read()content f.read()print(content) 2 …

基本概念学习(7000)--P2P对等网络

对等网络&#xff0c;即对等计算机网络&#xff0c;是一种在对等者&#xff08;Peer&#xff09;之间分配任务和工作负载的分布式应用架构[1] &#xff0c;是对等计算模型在应用层形成的一种组网或网络形式。“Peer”在英语里有“对等者、伙伴、对端”的意义。因此&#xff0c;…