js变量声明var使用与不使用的区别详解


Posted in Javascript onJanuary 21, 2019

一、区分显示的声明与隐式声明(var)

JS中变量声明分显式声明和隐式声明。

var name = 'muzidigbig';//显示声明 
name = 'muzidigbig';//隐式声明(为全局变量的一个属性)

在函数中使用var关键字进行显式声明的变量是做为局部变量,在全局范围内声明的变量为全局变量;而没有用var关键字,使用直接赋值方式声明的是全局变量(全局对象属性)。

// name = 'muzidigbig';//隐式声明(为全局变量的一个属性)
  console.log(name);
  function person(){
    name = '木子大大';
    console.log(name);
  }
  person();

当我们使用访问一个没有声明的变量时,JS会报错;而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式声明一个全局变量,这一点一定要注意。

name = 'muzidigbig';//隐式声明(为全局变量的一个属性)
console.log(name);
function person(){
  name = '木子大大';
  console.log(name);//木子大大
}
person();

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

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

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

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

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

若有不足请多多指教!希望给您带来帮助!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Javascript 相关文章推荐
javascript 从if else 到 switch case 再到抽象
Jul 17 Javascript
js调试系列 源码定位与调试[基础篇]
Jun 18 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
Dec 12 Javascript
javascript中使用未定义变量或值的情况分析
Jul 19 Javascript
jquery事件绑定解绑机制源码解析
Sep 19 Javascript
使用jQuery实现动态添加小广告
Jul 11 jQuery
vue中计算属性(computed)、methods和watched之间的区别
Jul 27 Javascript
浅析node.js的模块加载机制
May 25 Javascript
vue实现公共方法抽离
Jul 31 Javascript
JavaScript浅层克隆与深度克隆示例详解
Sep 01 Javascript
antd多选下拉框一行展示的实现方式
Oct 31 Javascript
Vue中Axios从远程/后台读取数据
Jan 21 #Javascript
vue项目中实现的微信分享功能示例
Jan 21 #Javascript
在vue项目中引入highcharts图表的方法
Jan 21 #Javascript
js的对象与函数详解
Jan 21 #Javascript
JS实现求5的阶乘示例
Jan 21 #Javascript
JS实现数组去重,显示重复元素及个数的方法示例
Jan 21 #Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
Jan 21 #Javascript
You might like
MVC模式的PHP实现
2006/10/09 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
jQuery插件开发的五种形态小结
2015/03/04 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
详解jquery和vue对比
2019/04/16 jQuery
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
layui form.render('select', 'test2') 更新渲染的方法
2019/09/27 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
Python Web服务器Tornado使用小结
2014/05/06 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
深入理解Django的自定义过滤器
2017/10/17 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
详解Python IO编程
2020/07/24 Python
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
毕业生求职推荐信
2013/11/04 职场文书
国贸专业个人求职信分享
2013/12/04 职场文书
对标管理实施方案
2014/03/12 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
股权转让协议书
2014/12/07 职场文书
催款函范文
2015/06/24 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书