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 相关文章推荐
Extjs 几个方法的讨论
Jan 28 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
Oct 29 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
jQuery实现tab标签自动切换的方法
Feb 28 Javascript
jquery中EasyUI实现同步树
Mar 01 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
Feb 17 Javascript
JavaScript-html标题滚动效果的简单实现
Sep 08 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
Aug 14 Javascript
JavaScript图片处理与合成总结
Mar 04 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
Apr 12 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 Javascript
Vue中this.$nextTick的作用及用法
Feb 04 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 压缩文件夹的类代码
2009/11/05 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php去除HTML标签实例
2013/11/06 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
Convert Seconds To Hours
2007/06/16 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
Python操作MongoDB数据库的方法示例
2018/01/04 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
python远程连接MySQL数据库
2019/04/19 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python中zip函数如何使用
2020/06/04 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
机械设计制造专业个人求职信
2013/09/25 职场文书
办公室前台的岗位职责
2013/12/20 职场文书
高中考试作弊检讨书
2014/01/14 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
sass 常用备忘案例详解
2021/09/15 HTML / CSS
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers