JavaScript中变量声明有var和没var的区别示例介绍


Posted in Javascript onSeptember 15, 2014

本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是

(function(){ 
// ... 
})();

在函数内部,有var和没var声明的变量是不一样的。有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东。
在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供的属性的特性查询方法,来发现之间的区别。

var fff = 2; 
window.ffa = 3; 
ffb = 4; 
this.ffc = 4; 
var ffftx = Object.getOwnPropertyDescriptor(window, 'fff'); //configurable:false,enumerable:true,value:2,writable:true 
var ffatx = Object.getOwnPropertyDescriptor(window, 'ffa'); //configurable:true,enumerable:true,value:2,writable:true 
var ffbtx = Object.getOwnPropertyDescriptor(window, 'ffb'); //configurable:true,enumerable:true,value:2,writable:true 
var ffctx = Object.getOwnPropertyDescriptor(window, 'ffc'); //configurable:true,enumerable:true,value:2,writable:true

通过上面,发现,原来还是有差别的,我们再用delete删除属性来验证下,配置性为false的属性无法删除。也就是通过变量var声明全局对象的属性无法删除,我们还会发现和函数声明创建的全局对象属性也无法删除。

delete fff; // 无法删除 
delete ffa; // 可删除 
delete ffb; // 可删除 
delete ffc; // 可删除

结论就是,加上var 和没加 var的声明全局变量是有区别的。

使用var语句重复声明语句是合法且无害的。如果重复声明且带有赋值,那么就和一般的赋值语句没差别。如果尝试读取没有声明过的变量,Js会报错。
JavaScript的函数作用域内,声明的变量或内部函数,在函数体内都是可见的。意味着,函数在定义之前可能已经可用。函数定义有两种方式,一种是函数定义表达式,一种是函数声明语句。

// 函数定义表达式 
var fns = function (){ 
// ... 
}; 
// 函数声明语句 
function fns(){ 
// ... 
}

函数声明语句“被提前”到外部脚本或外部函数作用域的顶部,所以以这种方式声明的函数,可以被再它定义之前出现的代码所调用。而函数定义表达式中,变量的声明被提前了,但是给变量的赋值是不会提前的,所以,以表达式方式定义的函数在函数定义之前无法调用。

(function() { 
testa(); // 打印出testa 
testb(); // 报错:提示undefined is not a function 
console.log(testc); //undefined,如果移到上面就可以了 
function testa() { 
console.log("testa"); 
} 
var testb = function() { 
console.log("tesb"); 
} 
var testc = "testc"; 
})();

当然,我们声明变量和函数,必须遵守基本的规范,变量和函数声明要提前。

Javascript 相关文章推荐
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 Javascript
js 走马灯简单实例
Nov 21 Javascript
Firefox下无法正常显示年份的解决方法
Sep 04 Javascript
js实现的二级横向菜单条实例
Aug 22 Javascript
js精美的幻灯片画集特效代码分享
Aug 29 Javascript
JS实现字符串转日期并比较大小实例分析
Dec 09 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
Jun 17 Javascript
JavaScript数值千分位格式化的两种简单实现方法
Aug 01 Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 Javascript
基于layui实现高级搜索(筛选)功能
Jul 26 Javascript
JavaScript的arguments对象应用示例
Sep 15 #Javascript
avascript中的自执行匿名函数应用示例
Sep 15 #Javascript
JavaScript function 的 length 属性使用介绍
Sep 15 #Javascript
css与javascript跨浏览器兼容性总结
Sep 15 #Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 #Javascript
一个字符串反转函数可实现字符串倒序
Sep 15 #Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 #Javascript
You might like
PHP正则验证Email的方法
2015/06/15 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
js 文件引入实现代码
2010/04/23 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
Python中Random和Math模块学习笔记
2015/05/18 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
python中的itertools的使用详解
2020/01/13 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Python实现爬取并分析电商评论
2020/06/19 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
如何利用find命令查找文件
2016/11/18 面试题
《哪吒闹海》教学反思
2014/02/28 职场文书
中学生运动会口号
2014/06/07 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
旅行社计调工作总结
2015/08/12 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android