当前位置: 首页 > news >正文

JS全局变量VAR和THIS

(注意)JS全局变量VAR和THIS

很多人都觉得在javascript声明一个变量,加var和不加var没有什么区别,实际上是一个错误的观点,如果在函数外面,也就是说在window区域加不加var确实是一样,因为都会是全局变量的效果,而如果在函数内部,加var就是局部变量,不加是全局变量。
function test(){     var1 = 2;   alert(var1);      }  
test();   alert(var1); 这样可以显示为2 function test(){     var var1 = 2;   alert(var1);      }   test();   alert(var1);
则为变量未定义错误
this多用于函数内部,它永远指向调用他的那个对象,看看下面的例子就明白了
var test={    a:"test",            // a省略了this,不是私有的(var);    msg:function(){            // msg省略了this,不是私有的(var);      a="1234";            // a为全局变量,可以在最外边尝试alert(a),可以得到1234      alert(this.a);      var msg1= function(){         alert(this.a);      }      msg1();    }
} test.msg(); 这样会分别显示 "test" ,"1234". 

 

再举一个例子:

var name = "The Window";    var object = {     name : "My Object",  
  getNameFunc : function(){      return function(){       return this.name;        };      }    };  
alert(object.getNameFunc()());  //The Window

但this也不是这么简单,在看看下面的例子 function test1()   {     this.var01 = "test"; }
function test2()   {   alert(var01); }
var a= new test1(); test1(); test2(); alert(a.var01);
都可以得到"test".
可以发现var01变量既是一个全局变量,又是test1内的成员变量。也就是说,如果在函数内部用this定义的变量,如果这个函数你不是直接来运行,而是作为一个类来new的话,虽然函数也要执行一遍,但里面的this定义的 变量是作为类的成员变量来定义的,也就是一个局部变量,上面的测试代码,如果去掉test1();  test2()运行就是未定义变量错误了。
说到变量,最后提一下js变量无类型的说法,这个说法本身没有错,但js变量无类型,这话很模糊,有的人会理解成js 里面没有数据类型。这显然是错误的,js 里面也有数字,字符,布尔,类等数据类型。说变量无类型,指的是刚定义一个变量的时候,这个变量是没有类型的,当你给它赋值的时候,值是什么类型,那这个变量就是什么类型了

相关文章:

  • trim 杂谈
  • Redis源码分析系列二十二: 5 time---timeCommand
  • 数据生成小工具下载
  • 任务分配调整
  • 深入Hadoop节点部署的策略
  • 解决单链表中的环问题
  • Shadow Mapping With PCF
  • 批量查看mysql多从状态和修改多从主库指向
  • 删除异常的MS SQL进程
  • Android的五种数据存储方式
  • 路由器VRRP配置
  • Eclipse user library位置
  • ORACLE 10g 64位下载地址
  • 设置中的一些默认值
  • 浅析Ad Exchange广告交易模式
  • Java Agent 学习笔记
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Node 版本管理
  • Redis学习笔记 - pipline(流水线、管道)
  • SpringBoot 实战 (三) | 配置文件详解
  • win10下安装mysql5.7
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 包装类对象
  • 从重复到重用
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 汉诺塔算法
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何在GitHub上创建个人博客
  • 深度学习在携程攻略社区的应用
  • 用jquery写贪吃蛇
  • 正则表达式-基础知识Review
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #define用法
  • #pragma once
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (SpringBoot)第二章:Spring创建和使用
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (状压dp)uva 10817 Headmaster's Headache
  • .NET面试题(二)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @ConditionalOnProperty注解使用说明
  • @FeignClient注解,fallback和fallbackFactory
  • @SuppressWarnings(unchecked)代码的作用
  • [20150904]exp slow.txt
  • [android学习笔记]学习jni编程
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [C#]DataTable常用操作总结【转】
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [HackMyVM]靶场Crossbow
  • [LeetCode] 197. 上升的温度
  • [LeetCode]: 145: Binary Tree Postorder Traversal
  • [Linux] 常用命令--版本信息/关机重启/目录/文件操作
  • [Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例