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

Javascript中局部变量和全局变量还有闭包的概念

1.一段javascript代码中 声明在方法或者对象外部的变量 称为全局变量 可以用var修饰,也可以不用。而声明在方法或者对向内部的变量,有var修饰的 就是局部变量 没有var修饰 依然是全局变量

举例1:

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8" />
<title></title>
</head>

<body>
<script>
var name = "The Window"; //全局变量 name
var object = { //全局变量 object
name: "My Object",//他的名字是 myobject (局部变量)
getNameFunc: function() {  //有一个 名为getnamefunc的方法    
return function() {      //返回值是 匿名函数 ,其返回值是this.name  
return object.name;      
};
}
};
alert(object.getNameFunc()()); //局部变量objcet.name 在objcet环境下被弹窗
alert(name); //全局变量 var name 在全局环境下被弹窗
</script>
</body>

</html>

 

举例2:

<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8" />
<title></title>
</head>

<body>
<script>
var name = "The Window"; //全局变量 name
var object = { //全局变量 object
name: "My Object",//他的名字是 myobject (局部变量)
getNameFunc: function() {  //有一个 名为getnamefunc的方法    
return function() {      //返回值是 匿名函数 ,其返回值是this.name  
return this.name;      
};
}
};
alert(object.getNameFunc()()); //在function作为方法被调用的时候 ,this指向的就是全局 this.name 指向的就是 “The Window”
alert(object.name); //  指向局部变量object.name "My Object"
</script>
</body>

</html>

 

这里有个概念 比较绕口 就是函数(method)和方法(function)的区别:

函数(function)是可以执行的javascript代码块,由javascript程序定义或javascript实现预定义。函数可以带有实际参数或者形式参数,用于指定这个函数执行计算要使用的一个或多个值,而且还可以返回值,以表示计算的结果。

方法(method)是通过对象调用的javascript函数。也就是说,方法也是函数,只是比较特殊的函数。假设有一个函数是fn,一个对象是obj,那么就可以定义一个method:

1
2
obj.method = fn;
obj.method();     //定义之后的调用

虽然区别对待函数和方法比较有用,但实际比较起来,它们之间并没有想象中那么大的差别。函数是可以用函数直接定义,也就是函数可以直接储存在变量之中,因为函数和字符串、数值一样也是数据类型。假如储存函数的变量是全局变量,也即是window对象的一个属性。因此,当你调用这个函数时,实际上也是调用window对象的一个方法。所以在函数和方法之间并没有技术上的区别,真正的差别在于设计和目的,方法是用来对this对象进行操作的,this对象是方法的一个重要属性,当this对象出现在方法主体内部,this值就指向调用该方法的对象。而函数通常是独立的,并不需要经常使用this对象。(这段是转载百度知道ZhangXin777999的

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

闭包的概念:

简单来说 就是父函数内的变量对子函数可见且可用。而子函数内的变量对父函数则不可见。

而闭包主要的功能有两个:一个是可以利用返回值让外部调取某个函数内部的变量,还有一个就是 如果一个变量以后也要用到。那么就需要这个变量不能被GC回收

具体请参考阮老师的博客 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

有很精细的讲解。

 

转载于:https://www.cnblogs.com/igong/p/9855495.html

相关文章:

  • 10.25 饮食
  • sticky
  • python面向对象的双下滑线方法
  • cf1000C Covered Points Count (差分+map)
  • 调试ucosii_pendsv中断函数有感
  • android-音量管理
  • python进阶之函数和类内建魔法属性
  • 10-28质量监控平台图形化
  • Linux下卸载安装jdk
  • Ubuntu14.04下安装Composer
  • ZBrush中的PolyPainting如何理解?
  • 小程序的全栈开发新时代
  • XJOI 3709 测测你的RP
  • 【Linux基础】VI 编辑器基本使用方法
  • hdu 2013 蟠桃记(c语言)
  • 【个人向】《HTTP图解》阅后小结
  • canvas 五子棋游戏
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • go append函数以及写入
  • Java编程基础24——递归练习
  • Js基础知识(四) - js运行原理与机制
  • linux安装openssl、swoole等扩展的具体步骤
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python十分钟制作属于你自己的个性logo
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring-boot 启动时碰到的错误
  • Vue 2.3、2.4 知识点小结
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 创建一个Struts2项目maven 方式
  • 搭建gitbook 和 访问权限认证
  • 后端_MYSQL
  • 微信小程序:实现悬浮返回和分享按钮
  • 微信支付JSAPI,实测!终极方案
  • 消息队列系列二(IOT中消息队列的应用)
  • 学习笔记:对象,原型和继承(1)
  • 智能网联汽车信息安全
  • 自制字幕遮挡器
  • gunicorn工作原理
  • python最赚钱的4个方向,你最心动的是哪个?
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #pragma once
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (编译到47%失败)to be deleted
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)基于IDEA的JAVA基础10
  • (原)本想说脏话,奈何已放下
  • .NET CLR基本术语
  • .NET CORE Aws S3 使用