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 相关文章推荐
javascript继承之为什么要继承
Nov 10 Javascript
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
AngularJS入门教程(一):静态模板
Dec 06 Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
Jun 17 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
Aug 12 Javascript
微信开发 微信授权详解
Oct 21 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
May 17 Javascript
requirejs + vue 项目搭建详解
Jun 16 Javascript
浅谈javascript中的prototype和__proto__的理解
Apr 07 Javascript
javascript实现下拉菜单效果
Feb 09 Javascript
Angular CLI发布路径的配置项浅析
Mar 29 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
简单的cookie计数器实现源码
2013/06/07 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
DOM相关内容速查手册
2007/02/07 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
小程序实现锚点滑动效果
2019/09/23 Javascript
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
Windows下为Python安装Matplotlib模块
2015/11/06 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
初中军训感想300字
2014/03/05 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
刑事代理授权委托书
2014/09/17 职场文书
党建工作汇报材料
2014/12/24 职场文书
爱心助学感谢信
2015/01/21 职场文书
邀请函格式范文
2015/02/02 职场文书
初中毕业生自我评价
2015/03/02 职场文书
2015年保送生自荐信
2015/03/24 职场文书
2015年度保密工作总结
2015/04/24 职场文书
教师节主题班会教案
2015/08/17 职场文书
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python