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 相关文章推荐
关于使用runtimeStyle属性问题讨论文章
Mar 08 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
Sep 15 Javascript
JavaScript中的this实例分析
Apr 28 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
May 15 Javascript
简单的JS时钟实例讲解
Jan 13 Javascript
node模块机制与异步处理详解
Mar 13 Javascript
微信小程序图片横向左右滑动案例
May 19 Javascript
webpack下实现动态引入文件方法
Feb 22 Javascript
Less 安装及基本用法
May 05 Javascript
JS立即执行函数功能与用法分析
Jan 15 Javascript
原生js实现获取form表单数据代码实例
Mar 27 Javascript
Node.js API详解之 module模块用法实例分析
May 13 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中处理模拟rewrite 效果
2006/12/09 PHP
Yii框架登录流程分析
2014/12/03 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
JavaScript获取当前时间向前推三个月的方法示例
2017/02/04 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
2019/05/15 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
Django配置跨域并开发测试接口
2020/11/04 Python
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
小学新教师培训方案
2014/02/03 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
管理失职检讨书范文
2015/05/05 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android