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 来操作字符串(一些字符串函数)
Feb 15 Javascript
写了一个layout,拖动条连贯,内容区可为iframe
Aug 19 Javascript
jQuery实现复选框批量选择与反选的方法
Jun 17 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
Feb 22 Javascript
jQuery Easyui 下拉树组件combotree
Dec 16 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
Jan 03 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
详解JS模块导入导出
Dec 20 Javascript
用node.js写一个jenkins发版脚本
May 21 Javascript
微信小程序 image组件遇到的问题
May 28 Javascript
你知道JavaScript Symbol类型怎么用吗
Jan 08 Javascript
javascript Number 与 Math对象的介绍
Nov 17 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
PHP 源代码压缩小工具
2009/12/22 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
js或css实现滚动广告的几种方案
2010/01/28 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
Python的一些用法分享
2012/10/07 Python
python计算最小优先级队列代码分享
2013/12/18 Python
Python判断操作系统类型代码分享
2014/11/22 Python
python对url格式解析的方法
2015/05/13 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
会计主管岗位职责范文
2013/11/08 职场文书
家长给小学生的评语
2014/01/30 职场文书
通信工程专业求职信
2014/06/04 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
投标承诺函范文
2015/01/21 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python