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 相关文章推荐
EXT中xtype的含义分析
Jan 07 Javascript
Javascript 面向对象(三)接口代码
May 23 Javascript
jquery与prototype框架的详细对比
Nov 21 Javascript
手机号码,密码正则验证
Sep 04 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
浅谈JavaScript中的对象及Promise对象的实现
Nov 15 Javascript
基于javascript实现彩票随机数生成(简单版)
Apr 17 Javascript
JS调用Android、Ios原生控件
Jan 06 Javascript
jQuery获取Table某列的值(推荐)
Mar 03 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
Oct 09 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 Javascript
JS图片懒加载的优点及实现原理
Jan 10 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
php auth_http类库进行身份效验
2009/03/19 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
python 实时遍历日志文件
2016/04/12 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
pandas带有重复索引操作方法
2018/06/08 Python
Python函数参数操作详解
2018/08/03 Python
django的ORM模型的实现原理
2019/03/04 Python
Python处理PDF与CDF实例
2020/02/26 Python
Django中的session用法详解
2020/03/09 Python
python接入支付宝的实例操作
2020/07/20 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
庆元旦广播稿
2014/02/10 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
幼儿园感谢信
2015/01/21 职场文书
清洁工个人工作总结
2015/03/05 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
python数据处理之Pandas类型转换
2022/04/28 Python
如何利用python创作字符画
2022/06/25 Python
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技