不能理解javascript的this指向哪里的看这里。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

https://www.cnblogs.com/cyl-record/p/3472758.html

(严格模式,就是修改全局函数的那个结构体的_this为undefined)

javascript函数的一种可行的实现

1) 存在脚本层直接接触不到的内部函数定义,需要用function.call去调用

脚本函数定义

function a(XYZ...){ .函数实现. }

内部实现是这样的

function internal_a(_this, XYZ...){ .函数实现.. }  <-- 这个是内部方法,脚本不知道它的存在

function a = {_this:window, func:internal_a}   <-- 这个a有bind和call方法   内部结构

function global_call(a, XYZ...)

{

   a.func(a._this, XYZ...)

}

2)function.bind()的实现可以修改_this的值,如果_this的值为null或者undefined就直接设置_this=window; 
(把_this指向number, string也是可以的。函数内部取到的this是number或者string,可以做到与对象或windows无关)

3) 实际调用过程

脚本 a(x, y, z...) => 

内部步骤

a.call(x, y, z...) => 

内部global_call(a, x, y, z...) =>

内部a.func(a._this, x, y, z...) =>

internal_a(a._this, x, y, z, ...)

===========================================

例子

<script>
var f = function () {
  document.write(this.x);
  document.write("<br>");
}

var x = 10;
var obj = {
  f: f,
  x: 20,
};

// 单独执行
f() // 10  如果是严格模式 输出undefined

// obj 环境执行
obj.f() // 20
</script>

========================

猜你喜欢

转载自blog.csdn.net/love_hot_girl/article/details/83743275