2024大二上js高级+ES6学习9.23(严格模式,this指向和改变this指向,高阶函数)

9.23.2024  函数进阶

1.函数定义方式

2.函数的调用方式

3.函数的this指向

而普通函数、定时器函数。立即执行函数一般是window调用的

构造函数调用:原型对象中的方法是在实例对象调用这个方法时,才指向实例对象。

4.改变函数的this指向(call,apply,bind)

Call方法:可调用函数

Apply方法:可调用函数

Math对象中的方法只能应用在数字上,而数组对象Array的方法中不包含求最大值和最小值

伪数组指的是它传递的参数形式像数组,但是不是真正的数组(?)

Bind方法:不会调用函数

它会返回一个新函数,此时新函数的this已经改为指定 的this

对全局作用域和全局对象的概念分辨不清

在JavaScript中,全局作用域(Global Scope)和全局对象(Global Object)是两个相关但不同的概念。

全局作用域

全局作用域是指在所有函数之外定义的变量和函数的上下文。在全局作用域中声明的变量和函数可以在整个脚本中被访问,无论它们位于何处。在浏览器环境中,全局作用域中的变量和函数实际上是全局对象的属性。

全局对象

全局对象是一个特殊的对象,它包含了所有全局变量和全局函数。在不同的JavaScript环境中,全局对象可能有不同的名称:

  • 浏览器环境:全局对象通常是 window 对象。当你在浏览器中编写JavaScript代码时,全局作用域中的变量和函数都是 window 对象的属性。例如,如果你在全局作用域中声明了一个变量 var a = 10;,那么 window.a 也会等于 10。
  • Node.js 环境:全局对象是 global 对象。在Node.js中,全局变量和函数是 global 对象的属性。
  • Web Workers:每个worker都有自己的全局作用域和全局对象。
  • 严格模式:在严格模式(strict mode)下,全局作用域中的变量和函数不再是全局对象的属性。这意味着在严格模式下,this 关键字的值是 undefined 而不是全局对象。

事实上window全局对象中并没有添加a,b这两个属性(因为用let),如果用var 就可以用var a=1,b=2将a,b属性添加到window全局对象

用var:

用let:

在JavaScript中,let 和 var 都是用来声明变量的关键字,但它们之间有几个关键的区别,这些区别影响了变量的作用域、生命周期和如何被提升。

1. 作用域(Scope)

  • var:使用 var 声明的变量具有函数作用域或全局作用域。如果在一个函数内部声明,它只能在该函数内部访问。如果在函数外部声明,它将成为全局变量。
  • let:使用 let 声明的变量具有块级作用域。这意味着它们只在包含它们的代码块(如 if 语句、for 循环、函数等)内部可见。

2. 变量提升(Hoisting)

  • var:使用 var 声明的变量会被提升到它们所在作用域的顶部,但它们的赋值不会提升。这意味着在变量声明之前就可以访问它们,但会得到 undefined。
  • let:使用 let 声明的变量也会被提升,但与 var 不同的是,它们不会在代码执行前被初始化。在变量声明之前访问它们会导致一个 ReferenceError。

3. 重复声明

  • var:在同一作用域内,可以使用 var 多次声明同一个变量,每次声明都会覆盖之前的值。
  • let:在同一作用域内,不能使用 let 多次声明同一个变量,尝试这样做会导致语法错误。

Bind方法应用:

当应用了bind后,this.disabled的this指向的是btn

5.使用严格模式

6.高阶函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值