js var定义全局变量与在window对象上直接定义属性区别

关于window

一、所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。

二、全局变量是 window 对象的属性。

三、全局函数是 window 对象的方法。

所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法。如:

var name = "xiaomi";
console.log(window.name);//"xiaomi"

区别一

全局变量不能通过delete删除,而window属性上定义的变量可以通过delete删除:

var num1=123;
window.num2=456;
delete num1;
delete num2;
console.log(num1);  //123
console.log(num2);  //num2 is not defined

全局变量num1之所以不能通过delete删除,是因为通过var语句添加的全局变量有一个configurable属性,其默认值为false,如下,所以这样定义的属性不可以通过delete删除。

var num1=123;
window.num2=456;
Object.getOwnPropertyDescriptor(window, "num1");
//Object {value: 123, writable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(window, 'num2');
//Object {value: 456, writable: true, enumerable: true, configurable: true}

区别二

尝试访问未声明的变量会报错,xxx is not defined。

但是通过查询window查询,可以知道某个可能未声明的变量是否存在,不会报错,只会显示undefined。

console.log(num1); // undefined
var num1=123;
console.log(num2); // ReferenceError: a is not defined
window.num2=456;

这一点可以用预编译解释,var声明的变量会提升声明到顶部。

区别三

在函数中使用var定义的变量是局部变量。

有时想要在外部也访问到函数里面的变量,就需要定义window对象属性。

function () {
    var num1 = 123;
    window.num2 = 456;
}
console.log(num1); //num1 is not defined
console.log(num2); //456

js中定义的全局变量,局部变量

关于变量和参数问题

var a  = 2; //全局变量 
function func()
{
    var a = 1;  //局部变量    
     a = 2;     //全局变量 
}

函数外面定义的变量是全局变量,函数内可以直接使用。

在函数内部没有使用var定义的=变量则为全局变量,

*在函数内使用var关键字定义的变量是局部变量,即出了函数外边无法获取。

js函数定义的参数没有默认值,(形参的默认值在之前只有新版火狐支持,目前新版的chrome浏览器也可以支持)

JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍。 

声明方式一: 

使用var(关键字) 变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量。该方式即为显式声明详细如下:

  var test = 5;//全局变量 
  function a(){ 
    var a = 3;//局部变量 
    alert(a); 
  } 
  function b(){ 
    alert(test); 
  } 
  //a();//调用a方法,那么方法里面的内容才会执行 
  //b();//同上 

声明方式二: 

没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。

    test = 5;//全局变量 
    function a(){ 
      aa = 3;//也是全局变量 
      alert(test); 
    } 
    //a();  //输出5 
    //alert(aa);//这里也可以方法a()方法里面的变量,因为aa是全局变量 

声明方式三: 

使用window全局对象来声明,全局对象的属性对应也是全局变量,详细如下:

<script> 
  window.test = 50; 
  alert(test);//输出50 
</script>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

js通过var定义全局变量与在window对象上直接定义属性的区别说明的更多相关文章

  1. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. ios – 200在xcode 7中生成DSMM警告

    解决方法我有同样的问题.Facebook表示他们已经意识到这一点并且不是高优先级,因为它不会影响应用程序.我回退到4.7.1警告问题不再存在.我不认为它会被拒绝但不能确定.

  4. xamarin.ios – Facebook iOS SDK:应用程序在启动时找不到“找不到符号:_ACFacebookAppIdKey.”仅在iOS 5中崩溃

    解决方法这是一个已修复的knownbug.目前唯一已知的解决方法是使用较旧版本的FacebookSDK.

  5. osx – 无法创建目录/ var / teamsserver

    OpenSSH_6.2p2,OSSLShim0.9.8r8Dec2011debug1:Readingconfigurationdata/etc/ssh_configdebug1:/etc/ssh_configline20:Applyingoptionsfor*debug1:Connectingto1.2.3.4[1.2.3.4]portPORT.debug1:Connectionestablished.Couldnotcreatedirectory‘/var/teamsserver/.ssh’.debug

  6. ios – 如何在Xcode 4.5中完成代码签名

    解决方法事实证明,从AppStore升级XCode并不会自动升级所有内容.转到首选项/下载,并确保安装最新的命令行工具.

  7. xcode7 – 谁在创建文件“/private/var/tmp/Untitled-*.uicatalog”?

    我正在调查为什么TeamCity构建代理程序用完了磁盘,并且在/private/var/tmp中找到了超过11,000个文件,它们都以Untitled-.uicatalog行命名.每个文件至少0.6MB.总磁盘占用空间约为4GB.这些文件可以追溯到几个月,所以他们能够重新启动.谁在创造他们?Xcode在编译至少有一个图像的xcassets目录时创建这些目录.我可以删除它们吗?

  8. ios – Client.ipa不包含文件

    从过去的几天开始,我就把这头发错了.当我尝试提交基于cordova的iOS应用程序时,我收到一个错误,即符号工具失败.这就是我在日志中的内容:以下是尝试提交到应用商店时所述错误的屏幕截图:请帮忙.解决方法我有同样的错误,因为应用程序包中错误地包含了几个静态库(libXXX.a).它们显示在主.App下的最终上传确认框(列出权利和证书)中.我的解决方案是从项目中删除对这些静态库的所有引用,在链接器标

  9. ios – 如何获得.ipa文件路径

    我的应用程序包含敏感数据,所以我想为.ipa文件生成哈希键,是否可以这样做?

  10. ios – 在设备上运行时Swift应用程序崩溃 – dyld:未加载库:@ rpath / libswiftCore.dylib

    我是ios/xcode世界的新手,并尝试在运行iOSv8.0.2的iphone5上测试一个简单的Swift应用程序.该应用程序在xcode(版本6.1(6A1052d))中成功构建,但当它尝试在iphone上运行时,它崩溃并出现以下错误:我已经尝试过大多数建议,这些建议帮助了遇到此错误的其他人,但却没有运气.使用其他团队成员的构建环境构建时,相同的应用程序工作正常.我比较了构建设置,发现它们是相同

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部