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 相关文章推荐
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
Mar 11 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
Apr 24 Javascript
JavaScript设计模式之策略模式实例
Oct 10 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
Jan 31 Javascript
Bootstrap每天必学之级联下拉菜单
Mar 27 Javascript
去除字符串左右两边的空格(实现代码)
May 12 Javascript
Javascript动画效果(4)
Oct 11 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
Jan 13 Javascript
JavaScript中捕获与冒泡详解及实例
Feb 03 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
Dec 11 jQuery
JavaScript中concat复制数组方法浅析
Jan 20 Javascript
create-react-app开发常用配置教程
Jun 25 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
雄兵连:第三季确定会出,不过时间未定,鹤熙是第三季的主角!
2020/03/13 国漫
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
详解JavaScript中操作符和表达式
2018/09/12 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
layer.alert回调函数执行关闭弹窗的实例
2019/09/11 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
Python reques接口测试框架实现代码
2020/07/28 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
德国PC硬件网站:CASEKING
2016/10/20 全球购物
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
竞聘书模板
2014/03/31 职场文书
计算机系本科生求职信
2014/05/31 职场文书
物理学专业求职信
2014/07/04 职场文书
教师年终个人总结
2015/02/11 职场文书
2016公司新年问候语
2015/11/11 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS
Python 实现Mac 屏幕截图详解
2021/10/05 Python