在JavaScript函数中this指向的是什么

今天我就跟大家分享一下JavaScript中这个重要的知识点。
有一定的参考价值,希望对大家有用。
研究this关键字常常让我们感到困惑。
目前还不清楚它在函数中指的是什么以及如何使用它。
今天这篇文章我们将详细介绍这方面的知识。
【推荐课程:JavaScript教程】Context。
JavaScript中的this关键字意味着函数有自己的执行上下文。
这里需要注意的是,函数的执行上下文与它的声明方式或功能无关,而是与代码中的调用方式相关。
我们将在调用此执行上下文时使用它。
当从函数访问this时,实际上访问了它的执行上下文。
函数调用方法和this上下文取决于函数调用方法。
我们可以用四种不同的方式调用上下文函数,因此这里也要做四件不同的事情:1.基本函数调用。
2.调用函数。
使用上下文对象,也称为隐式绑定。
3.使用call()或调用apply()函数,也称为显式绑定。
4.使用bind()方法绑定基函数调用。
基本函数调用是调用函数的最简单方法。
示例:[xss_clean]varname="张三";functionstudent(){console.log(.this.name);}学习。
nt();[xss_clean]在这个例子中,可以看到Student()从全局作用域调用了一个函数,所以这里是在全局作用域,所以输出结果就是“”张三的隐式绑定结果""当函数“包含”在对象中时,我们说函数的this隐式绑定到对象[xss_clean]varstudent={name:"ZhangSan",obj:function(){console.log(this.name)}}student.obj();[xss_clean]虽然函数obj是分配给对象的,但是并不会因为定义了就会有区别物体的内部和外部之间。
通过隐式绑定,obj仍然可以通过this访问student对象的属性。
显式绑定可以使用call()或apply()方法来调用函数。
,并且它的执行上下文显式绑定到一个对象,调用和使用可以修改this指针。
示例:未使用call()或apply()[xss_clean]varname="ZhangSan";varobj={name:"李思",fun:function(){console.log(this.name);}}obj.fun());[xss_clean]profit使用call()将this指向window[xss_clean]varname="张三";varobj={name:"李思",fun:function(){onsole.log(this.name);}}obj.fun.call(window);[xss_clean]bind()bind()会创建一个函数,函数体中这个对象的值会绑定到传递给bind()函数的第一个参数的值,但是Bind()函数。
方法不会创建函数,它只会返回要执行的函数[xss_clean]">vara={b:function(){varfunc=function(){console.log(this.c);}func.bind(this)();},c:'你好!'}a.b();[xss_clean]使用绑定方法将this指向c对象的内容。
总结:

js基础知识点

JavaScript组件中的DOM;包括BOM和ECMAScript。
DOM和BOM用于运行浏览器环境,ECMAScript是JavaScript的主要语言规范。
JavaScript执行的三个阶段;函数声明优于变量声明。
当宣布一项行动时;它立即将其定义提升到全球范围。
堆栈遵循LIFO(先进后出)原则,新添加或删除的项都放置在堆栈的顶部。
主要存储基本类型变量和数组等对象引用。
队列遵循FIFO(先进先出)原则;尾部有新元素,头部有旧元素。
用于存储基类型变量和对象引用。
作用域定义了变量和函数的可访问范围,将全局作用域和局部作用域分开。
变量和函数在全局范围内可见;在本地作用域中只能访问本地作用域中的变量和函数。
字符串的赋值和操作包括原始类型和包装类型。
数字,字符串等原始类型没有属性和方法。
在运行时,将创建相应的包类型对象。
在预编译过程中在全局范围内创建全局对象;提出变量和函数;然后将它们存储在全局变量中。
这个过程涉及四个步骤,包括引发变量和函数。
每当执行函数时就会创建一个执行环境,并且具有唯一的上下文。
处理后,破坏环境,作用域链包含执行操作时移动的所有内容。
更改作用域链的方法驻留在JavaScript引擎访问的内部属性[[Scope]]中,该引擎包含作用域对象的集合。
块级作用域通过解析函数创建AO上下文。
提升的变量和函数位于变量环境中,而块级作用域中的变量存储在词法环境的单独区域中。
词法环境的内部结构维护一个用于变量搜索的小池。
ES6引入了let和const关键字,它们赋予JavaScript块级作用域并提高代码的可读性和可维护性。

JavsScript一些奇奇怪怪的知识点和语法

数据类型知识点:在JavaScript中,常见的数据类型包括Boolean、Numeric、Null、NaN、Undefined、EmptyString和Reference类型。
所有引用类型在转换为布尔值时均为true。
但需要注意的是,数值类型变量不能直接调用字符串方法,例如split。
要执行此类操作,必须首先将数字类型转换为字符串。
函数使用注意事项:生成定长数组时,要保证函数内部逻辑正确。
传递参数时避免使用表达式(例如三元运算符),因为这可能会导致函数以不同的方式计算参数结果。
表达式可以作为参数而不是结果传递。
模块化细节:在模块化中,理解import、require、export和module.exports之间的区别至关重要。
根据不同的模块规格,其使用方法也有所不同。
在Taro.js框架中,ES6模块中的导入和导出可能不会在编辑器中报错,但可能会在构建过程中导致错误。
在这种情况下,应该使用require。
注意webpack版本中@符号的限制,只能使用绝对或相对路径引入。
组件之间传递值和管理状态:从父组件向子组件传递值时,避免使用key或id等特殊参数,以免影响值的正确传递。
使用钩子进行状态管理时,如果修改了原始数组,可能无法触发渲染。
为了确保状态更新生效,必须制作数组的完整副本以确保数据独立性。