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 双色表格实现代码
Dec 08 Javascript
该如何加载google-analytics(或其他第三方)的JS
May 13 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
Mar 24 Javascript
JS操作图片(增,删,改) 例子
Apr 17 Javascript
Js与Jq 获取页面元素值的方法和差异对比
Apr 30 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
Sep 09 Javascript
微信小程序学习之数据处理详解
Jul 05 Javascript
JavaScript原生实现观察者模式的示例
Dec 15 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
JavaScript一元正号运算符示例代码
Jun 30 Javascript
Js实现复选框的全选、全不选反选功能代码实例
Feb 28 Javascript
vue中 this.$set的使用详解
Nov 17 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
php中autoload的用法总结
2013/11/08 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
python中的lambda表达式用法详解
2016/06/22 Python
Django卸载之后重新安装的方法
2017/03/15 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
Python os.access()用法实例
2019/02/18 Python
python装饰器使用实例详解
2019/12/14 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
大学毕业生通用自我评价
2014/01/05 职场文书
技能竞赛活动方案
2014/02/21 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python