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 相关文章推荐
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
Dec 02 Javascript
JavaScript操纵窗口的方法小结
Jun 28 Javascript
javascript:void(0)点击登录没反应怎么解决
Nov 13 Javascript
JS简单实现点击复制链接的方法
Aug 03 Javascript
Jquery删除css属性的简单方法
Dec 04 Javascript
js实现无缝滚动图
Feb 22 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
Apr 07 Javascript
Mint UI 基于 Vue.js 移动端组件库
Nov 07 Javascript
手机注册发送验证码倒计时的简单实例
Nov 15 Javascript
Javascript删除数组里的某个元素
Feb 28 Javascript
详解Jest结合Vue-test-utils使用的初步实践
Jun 27 Javascript
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
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 url 加密解密函数代码
2011/08/26 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
PHP动态输出JavaScript代码实例
2015/02/12 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
2013/11/25 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
Python的Django框架中的表单处理示例
2015/07/17 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
Django 实现对已存在的model进行更改
2020/03/28 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
反洗钱宣传活动总结
2014/08/26 职场文书
心得体会的写法
2014/09/05 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
团委工作总结2015
2015/04/02 职场文书
2015年高中班级工作总结
2015/07/21 职场文书