首页 >> js开发 >> jsJS函数本身的作用域实例分析js大全
jsJS函数本身的作用域实例分析js大全
发布时间: 2021年1月13日 | 浏览:
| 分类:js开发
本文实例讲述了JS函数本身的作用域。分享给大家供大家参考,具体如下:函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在作用域无关。
var a = 1
var x = function() {
console.log(a)
}
function f() {
var a = 2
x()
}
f()
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
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
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
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
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./code/HtmlJsRun测试上述代码运行效果。在线HTML/CSS/JavaScript代码运行工具在线HTML/CSS/JavaScript代码运行工具http://tools./code/HtmlJsRun关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》JavaScript常用函数技巧汇总javascript面向对象入门教程JavaScript错误与调试技巧总结JavaScript数据结构与算法技巧总结JavaScript数学运算用法总结希望本文所述对大家JavaScript程序设计有所帮助。
var a = 1
var x = function() {
console.log(a)
}
function f() {
var a = 2
x()
}
f()
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
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
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
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
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./code/HtmlJsRun测试上述代码运行效果。在线HTML/CSS/JavaScript代码运行工具在线HTML/CSS/JavaScript代码运行工具http://tools./code/HtmlJsRun关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》JavaScript常用函数技巧汇总javascript面向对象入门教程JavaScript错误与调试技巧总结JavaScript数据结构与算法技巧总结JavaScript数学运算用法总结希望本文所述对大家JavaScript程序设计有所帮助。
相关文章:
- jsvue cli4.0项目引入typescript的方法js大全
- js代码javascript递归函数定义和用法示例分析
- jsvue点击标签切换选中及互相排斥操作js大全
- jsvue实现自定义多选按钮js大全
- jsVue项目前后端联调(使用proxyTable实现跨域方式)js大全
- js解决vue一个页面中复用同一个echarts组件的问题js大全
- jsVue移动端项目实现使用手机预览调试操作js大全
- js深入理解 ES6中的 Reflect用法js大全
- JavaScriptvuejs element table 表格添加行,修改,单独删除行,批量删除行操作
- js解决echarts图表使用v-show控制图表显示不全的问题js大全