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

 更新时间:2014年09月15日 17:01:45   投稿:whsnow  
在函数内部,有var和没var声明的变量是不一样的。有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东

本文来论述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学习笔记之10个原生技巧

    javascript学习笔记之10个原生技巧

    首先在这里要非常感谢无私分享作品的网友们,这些代码片段主要由网友们平时分享的作品代码里面和经常去逛网站然后查看源文件收集到的。把平时网站上常用的一些实用功能代码片段通通收集起来,方便网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率。
    2014-05-05
  • D3.js的基础部分之数组的处理数组的排序和求值(v3版本)

    D3.js的基础部分之数组的处理数组的排序和求值(v3版本)

    这篇文章主要介绍了D3.js的基础部分之数组的处理数组的排序和求值(v3版本) ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • JS获取iframe中marginHeight和marginWidth属性的方法

    JS获取iframe中marginHeight和marginWidth属性的方法

    这篇文章主要介绍了JS获取iframe中marginHeight和marginWidth属性的方法,涉及javascript操作iframe属性的技巧,并分析了marginHeight和marginWidth属性的功能,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • JavaScript检测上传文件大小的方法

    JavaScript检测上传文件大小的方法

    这篇文章主要介绍了JavaScript检测上传文件大小的方法,涉及javascript针对上传文件的相关判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • JavaScript之Array常见的方法详解

    JavaScript之Array常见的方法详解

    这篇文章主要为大家介绍了JavaScript之Array常见的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助V
    2021-11-11
  • js和jquery分别验证单选框、复选框、下拉框

    js和jquery分别验证单选框、复选框、下拉框

    这篇文章主要为大家详细介绍了js和jquery分别验证单选框、复选框、下拉框的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • 游戏人文件夹程序 ver 4.03

    游戏人文件夹程序 ver 4.03

    游戏人文件夹程序 ver 4.03...
    2006-07-07
  • Javascript实现数组中的元素上下移动

    Javascript实现数组中的元素上下移动

    这篇文章主要给大家介绍了Javascript实现数组中的元素上下移动的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • javascript 用函数实现继承详解

    javascript 用函数实现继承详解

    下面小编就为大家带来一篇javascript 用函数实现继承详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • TypeScript 工具泛型教程示例

    TypeScript 工具泛型教程示例

    这篇文章主要为大家介绍了TypeScript 工具泛型教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论