前端JS: 通过代码-看函数作用域this对象
函数中的this对象,指向的是调用该函数的对象;谁调用它,它的作用域中的this就指向谁;
每一个具体的问题,都值得思考这个细节点: 1.以下输出结果是:
var obj={name:'test',output:function(){console.log("1");}}console.log(obj.output());var outputFunc=obj.output;outputFunc();
复制代码
console: 1 1
2.以下输出结果是:
obj={name:'test',output:function(){return this.name;}}console.log(obj.output());var outputFunc=obj.output;outputFunc();
复制代码
console: test, ""
3.以下输出结果是:
obj={count:1,output:function(){ console.log(this);return this.count;}}console.log(obj.output());var outputFunc=obj.output;outputFunc();
复制代码
4.请判断以下打印输出结果是什么?
function a(){function b(){console.log(this);}console.log(this);b();}a();console.log(a);console.log(b);分析:
- 首先function 关键字申明定义一个函数a;在函数a中申明定义一个函数b();并且在函数a();中执行b();
- 还是牢记一点,对于函数中的this对象,谁调用该函数,函数中的this对象就指向谁;所以当在浏览器console中执行以上代码时,a()默认是window对象调用;即:可以理解为window.a();
-根据以上,第五行中的console.log(this);打印结果应该是window对象;javascript语言是单线程执行;紧接着执行同步代码b();相当于是执行了a()函数作用域中的this.b();所以第三行中的console.log(this);打印结果应该也是window对象;
- 第九行console.log(a);相当于执行了console.log(window.a); function 关键字申明定义了一个函数a;所以打印结果应该为一个函数对象:f a(){function b(){console.log(this);}console.log(this);b();}- 第十行:console.log(b);相当于执行了console.log(window.b);由于在window对象中没有申明定义b;所以应该打印结果为 b is not defined ;
复制代码
console结果如下:
转载于:https://juejin.im/post/5cc3dadc51882525095bbeae
前端JS: 通过代码-看函数作用域this对象相关推荐
- JS学习之全局函数与window对象
学习峰哥Js教程自学笔记,峰哥Java学习路线:http://www.java1234.com/javaxuexiluxiantu.html 1.全局函数: 1)概念:全局函数不属于任何一个内置对象. ...
- 块级作用域和函数作用域
函数作用域与块级作用域 函数作用域:在函数内部声明的变量只能影响到变量所在函数体本身,无法从外部对函数内部的变量进行调用,被称为'函数作用域' 块级作用域:ES6 引入了 let 和 const 关键 ...
- 2021-02-26js学习-arguement,函数,作用域链,js代码执行流程,对象创建,new执过程.
问题: Agurement概念认识? 伪数组概念认识? 函数的两种声明方式? 函数中没有声明而直接使用的变量是全局变量吗? Js块级作用域认识? 作用域链 概念认识? Js引擎执行代码的两步是什么? ...
- 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...
- 如何去调试前端JS代码?以Chrome谷歌浏览器为例
前端调试是所有前端开发者绕不过去的一个环节,很多初学者却不知道该如何去做,今天小千就来以Chrome谷歌浏览器为例,教大家如何去调试前端JS代码. 为什么要调试? 程序就是函数堆砌起来的,程序的运行就 ...
- js中立即执行函数会预编译吗_作为前端你了解JavaScript运行机制吗?
作为前端工程师,大家都知道js是前端一开始就要学会的知识点,js的代码你会写了,那js的运行机制你了解吗?只有了解了js的运行机制,才能在工作中如鱼得水,今天就跟随珠峰的老师一起来了解下js的运行机制 ...
- 如何保护前端JS代码?前端js代码加密
Web前端JS代码需要保护吗? 这得具体情况具体分析. 1.如果只是写一段web页面图片轮播,或是跑马灯效果等等之类简单的功能.那不需要保护. 2.如果是精心设计一个绚丽的特效,如果想要保护这段自己付 ...
- 咸鱼前端—js 函数
咸鱼前端-js 函数 函数的定义 函数的调用 作为函数 作为方法 作为构造函数 通过它们的call()和apply()方法间接调用 函数的形参和实参 返回值 函数:把一些重复的代码封装起来,以供需要时 ...
- 重学前端之(4)函数、作用域、预解析
函数 为什么要有函数? 在写代码的时候,有一些常用的代码需要书写多次,如果直接复制粘贴的话,会造成大量的冗余代码. 如果修改呢?? 多个页面呢?? 函数可以封装一段重复的JavaScript代码,它只 ...
最新文章
- Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector
- Cookie application session
- JVM学习--(二)内存模型、可见性、指令重排序
- 流量中转的服务器,你的服务器能承受多大流量
- kali 运行java_kali linux运行java程序
- c++笔记(8) 指针及动态内存管理
- Rabbitmq消息过期时间设置
- python编译 pyd 工具_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
- fmea第五版pfmea表格_解读第五版FMEA“六步法”(附第五版FMEA表单下载)
- 示波器学习笔记(2)——模拟示波器
- java单例模式实例_java 单例模式的实例详解
- matlab年平均,MATLAB平均每5个元素
- 机器学习——模型融合
- 厦门大学计算机科学与技术学院官网,罗晔-厦门大学计算机科学系
- Redis数据结构-sds
- BeEF-XSS实验手记
- 若依ruoyi——手把手教你制作自己的管理系统【二、修改样式】
- Android Studio中对res、AndroidManifest、buil.gradle文件夹的讲解
- 临床血液学综合练习题库【3】
- D2大会资源分享(解决了GitHub下载限速)
热门文章
- fastjson将json字符串转为Map对象,拿走不谢
- python之异常处理
- 实现一个简单的文件上传进度条
- 【转】linux之pmap命令!
- 计算机科学中最重要的32个算法(转)
- C#中结构数据类型的使用
- asp.net 中Gridview 使用总结
- Node-RESTful
- Linux-鸟菜-7-Linux文件系统-EXT
- 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ④ ( 创建 tasks.json 编译器构建配置文件 | tasks.json 编译器构建配置文件分析 )