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 相关文章推荐
js 获取中文拼音,Select自动匹配字母获取值的代码
Sep 23 Javascript
JQuery下关于$.Ready()的分析
Dec 13 Javascript
这段js代码得节约你多少时间
Dec 20 Javascript
浅析XMLHttpRequest的缓存问题
Dec 13 Javascript
JavaScript中的object转换成number或string规则介绍
Dec 31 Javascript
AngularJS+Node.js实现在线聊天室
Aug 28 Javascript
vue,angular,avalon这三种MVVM框架优缺点
Apr 27 Javascript
javascript的函数劫持浅析
Sep 26 Javascript
javascript实现文本框标签验证的实例代码
Oct 14 Javascript
Node如何后台数据库使用增删改查功能
Nov 21 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
Dec 04 Javascript
前端JavaScript大管家 package.json
Nov 02 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程序之die调试法 快速解决错误
2009/09/17 PHP
php通过字符串调用函数示例
2014/03/02 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
javascript 文档的编码问题解决
2009/03/01 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
python发送告警邮件脚本
2018/09/17 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
大学生2014全国两会学习心得体会
2014/03/10 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
处理canvas绘制图片模糊问题
2022/05/11 Javascript