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 相关文章推荐
JavaScript Undefined,Null类型和NaN值区别
Oct 22 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
Nov 02 Javascript
jquery高效反选具体实现
May 05 Javascript
jQuery中:radio选择器用法实例
Jan 03 Javascript
JavaScript入门基础
Aug 12 Javascript
javascript弹性运动效果简单实现方法
Jan 08 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
利用jquery实现实时更新歌词的方法
Jan 06 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
Jan 09 Javascript
分享bootstrap学习笔记心得(组件及其属性)
Jan 11 Javascript
layui 对弹窗 form表单赋值的实现方法
Sep 04 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
Feb 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
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
JQuery给网页更换皮肤的方法
2015/05/30 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
Webpack devServer中的 proxy 实现跨域的解决
2018/06/15 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
用python读写excel的方法
2014/11/18 Python
Python查找相似单词的方法
2015/03/05 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Etam德国:内衣精品店
2019/08/25 全球购物
explicit和implicit的含义
2012/11/15 面试题
客房主管岗位职责
2013/12/09 职场文书
爱情寄语大全
2014/04/09 职场文书
工地安全质量标语
2014/06/07 职场文书
争先创优活动总结
2014/08/27 职场文书
争先创优公开承诺书
2014/08/30 职场文书
超市收银员岗位职责
2015/04/07 职场文书
社区党支部承诺书
2015/04/29 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript