JS函数本身的作用域实例分析


Posted in Javascript onMarch 16, 2020

本文实例讲述了JS函数本身的作用域。分享给大家供大家参考,具体如下:

函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在作用域无关。

var a = 1
var x = function() {
 console.log(a)
}

function f() {
 var a = 2
 x()
}

f()

上面代码中,函数x是在函数f的外部声明的,所以它的作用域绑定外层,内部变量a不会到函数f体内取值,所以输出1,而不是2。

总之,函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域

var x = function () {
 console.log(a);
};

function y(f) {
 var a = 2;
 f();
}

y(x)
// ReferenceError: a is not defined

上面代码将函数x作为参数,传入函数y。但是x是在函数y体外声明的,作用域绑定外层,因此找不到函数y的内部变量a,导致报错。

同样的函数本内部声明的函数,作用域绑定在函数体内部

function foo() {
 var x = 1;
 function bar () {
 console.log(x)
 }
 return bar
}
var x = 2 
var f = foo()
f() // 1

箭头函数的作用域,是和父级上下文绑定在一起的

var obj = {
 id: 1,
 show: () => {
 console.log(this.id)
 }
}

 
obj.show() // undefined

上面代码show函数是一个箭头函数,其this指向父级,而父级是一个顶级对象,window,window.id没有定义,所以返回undefined

var obj = {
 id: 2,
 show: function() {
 return () => {
  console.log(this.id)
 }
 }
}

obj.show()() // 2

上面代码中,箭头函数定义在show函数内部,其父级作用域为show函数的作用域,show函数中this指向调用show函数的对象,即obj,obj中有id属性,且值为2,所以输出2

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JS操作Cookies包括(读取添加与删除)
Dec 26 Javascript
jquery ajax 局部刷新小案例
Feb 08 Javascript
jQuery中$.each使用详解
Jan 29 Javascript
jQuery事件委托之Safari
Jul 05 Javascript
jQuery新窗口打开外链接
Jul 21 Javascript
javascript input输入框模糊提示功能的实现
Sep 25 Javascript
jQuery阻止事件冒泡实例分析
Jul 03 jQuery
JS+HTML实现的圆形可点击区域示例【3种方法】
Aug 01 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 Javascript
微信 jssdk 签名错误invalid signature的解决方法
Jan 14 Javascript
微信小程序和H5页面间相互跳转代码实例
Sep 19 Javascript
JS+CSS实现随机点名(实例代码)
Nov 04 Javascript
JavaScript实现tab栏切换效果
Mar 16 #Javascript
vue-cli3使用mock数据的方法分析
Mar 16 #Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
Mar 16 #Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 #Javascript
JavaScript实现动态留言板
Mar 16 #Javascript
vue中的双向数据绑定原理与常见操作技巧详解
Mar 16 #Javascript
js+canvas实现纸牌游戏
Mar 16 #Javascript
You might like
php escape URL编码
2008/12/10 PHP
jquery实现心算练习代码
2010/12/06 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python深入学习之特殊方法与多范式
2014/08/31 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
Python正则表达式知识汇总
2017/09/22 Python
速记Python布尔值
2017/11/09 Python
python监控键盘输入实例代码
2018/02/09 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
python实现用户名密码校验
2020/03/18 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
美国第一香水网站:Perfume.com
2017/01/23 全球购物
瑞士图书网站:Weltbild.ch
2019/09/17 全球购物
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
创业资金计划书
2014/02/06 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
大学生操行评语大全
2014/12/31 职场文书
学生检讨书
2015/01/27 职场文书
小学教师个人总结
2015/02/05 职场文书
千与千寻观后感
2015/06/04 职场文书