首页 > 其他分享 >JS中函数的上下文和上下文规则

JS中函数的上下文和上下文规则

时间:2023-09-04 17:56:02浏览次数:39  
标签:function 函数 JS fun 规则 var 上下文

JS:函数的上下文、上下文规则、call和apply指定上下文

JS中函数的上下文和上下文规则一、函数的上下文函数中可以使用this关键字,它表示函数的上下文函数中的this具体指代什......

JS中函数的上下文和上下文规则

一、函数的上下文

  • 函数中可以使用this关键字,它表示函数的上下文
  • 函数中的this具体指代什么必须通过调用函数时的“前言后语”来判断
  • 函数的上下文由调用方式决定
    1.情形1:对象打点调用函数,函数中的this指代这个打点的对象xiaoming.sayHello()
    2. 情形2:圆括号直接调用函数,函数中的this指代window对象var sayHello = xiaoming.sayHello;
    sayHello();
    总之,函数只有被调用,它的上下文才能被决定

二、上下文规则

(1)规则一:对象打点调用它的方法函数,则函数的上下文是这个打点的对象       对象.方法()-->对象

function fun() {
	console.log(this.a + this.b); 
}
var obj = { 
	a: 1, 
	b: 2, 
	c: [{
		a: 3, 
		b: 4, 
		c: fun 
	}] 
};
var a = 5; 
obj.c[0].c();  //构成对象.方法()的 形式,适用规则1  结果为7

2)规则二:圆括号直接调用函数,则函数的上下文是window对象   函数()-->window

function fun() {
    return this.a + this.b;
}
var a = 1;
var b = 2;
var obj = {
    a: 3,
    b: fun(),   //适用于规则2  window对象  3
    fun: fun
};
var result = obj.fun();    //适用于规则1  结果为6
console.log(result);

(3)规则三:数组(类数组对象)枚举出函数进行调用,上下文是这个数组(类数组对象)  数组[下标]()-->数组

var arr = ['A', 'B', 'C', function () {
    console.log(this[0]);
}];
arr[3]();    //A

(4)规则四:IIFE(立即调用函数表达式,自执行匿名函数)中的函数,上下文是window对象   IIFE-->window

(function() {
 })();
var a = 1;
var obj = {
    a: 2,
    fun: (function () {  //IIFE立即执行,返回内层函数
        var a = this.a;   //适用规则4,this.a是window  a属性即1
        return function () {
            console.log(a + this.a);  //前面指闭包中的a值,即1,this.a是规则1中 2
        }   //适用规则4 
    })()    //最后结果3
};
obj.fun()  //适用规则1  即2   

(5)规则五:定时器、延时器调用函数,上下文是window对象setInterval(函数, 时间); setTimeout(函数, 时间);    定时器或者延时器-->window

var obj = {
    a: 1,
    b: 2,
    fun: function () {
        console.log(this.a + this.b);
    }
}
var a = 3;
var b = 4;
setTimeout(obj.fun, 2000);   //适用规则五  7
var obj = {
    a: 1,
    b: 2,
    fun: function () {
        console.log(this.a + this.b);
    }
}
var a = 3;
var b = 4;   
setTimeout(function () {   //延时器调用的是外层的匿名函数
    obj.fun();    //适用规则1  //真正调用函数的不再是延时器,而是obj.fun调用的。
}, 2000);    

(6)规则六:事件处理函数的上下文是绑定事件的DOM元素  dom时间处理函数-->绑定的dom

DOM元素."token operator">= function () { };

(7)call和apply能指定函数的上下文   call和apply-->任意指定

函数.call(上下文);   //sum.call(xiaoming)
函数.apply(上下文);  //sum.apply(xiaoming)


function sum() {
    alert(this.chinese + this.math + this.english);
}
var xiaoming = {
    chinese: 80,
    math: 95,
    english: 93
}
sum.call(xiaoming)
sum.apply(xiaoming)


function sum(b1, b2) {
    alert(this.c + this.m + this.e + b1 + b2);
}
sum.call(xiaoming, 5, 3);   //call要用逗号罗列参数
sum.apply(xiaoming, [5, 3]);  //apply要把参数写到数组中

(8)使用new调用的函数和require加载的函数-->秘密创建出的对象

class Person {
    constructor(name, age){
        this.name = name;
        this.age = age;
    }
}
person = new Person("zs", 18);
console.log(person)  //{ name: 'zs', age: 18 }

  

 









标签:function,函数,JS,fun,规则,var,上下文
From: https://www.cnblogs.com/yoyo1216/p/17677712.html

相关文章

  • 你折腾一天都装不上的插件,函数计算部署 Stable Diffusion 都内置了
    在进行函数计算StableDiffusion答疑的过程中,遇到很多同学在装一些插件的过程中遇到了难题,有一些需要安装一些依赖,有一些需要写一些代码,很多时候安装一个插件就能折腾几天,我们收集了很多同学需要的插件,这一次把比较难装的StableDiffusion插件都装好了。可以根据自己的需要自......
  • Java对象与json的转换使用的依赖是fastjson,转换的简单案例
    2023-09-04<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>转换的简单案例packagecom.hh.json;importcom.alibaba.fastjson......
  • Web Service Tip: JSPs Calling Web Services
    WebServiceTip:JSPsCallingWebServicesHowdoIcallaWebservicefromaJSP? Seemslikeasimplequestionbutitturnsouttherearemanyways-somequickanddirtyandothersmorecorrect. Let'snotdebatecorrectness(doyoureallywantto......
  • 针对jsapi_ticket不能频繁刷新,缓存的几种方式
    正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket。 在.NETCore中,你可以使用内置的缓存系统来管理和操作缓存数......
  • 已知16进制和透明度,使用JS语法求他们在一起的rgba。可以参考下面代码:
    事件起因:最近做的一个大转盘游戏页面样式编辑,背景透明度调整的时候,会导致字体一起变动,于是需要将背景演示的16进制和透明度一起转换成rgba。 functionhexToRgba(hex,alpha){//去掉可能包含的"#"符号if(hex.startsWith("#")){hex=hex.slice(1);}//解析1......
  • 前端小白Step2-package.json文件详解
    前文已讲过 package.json-------npm的配置文件,主要用于确定当前项目直接依赖的包版本的范围(例如:^1.0.0表示的是大于等于1.0.0小于2.0.0)只依赖package.json管理包会有两个缺点:    *.同一份package.json安装的依赖版本可能不同,如果依赖包有小版本更新并且引入了bug会导致......
  • 无涯教程-JavaScript - CUBEVALUE函数
    描述CUBEVALUE函数从多维数据集返回一个聚合值。语法CUBEVALUE(connection,[member_expression1],[member_expression2],…)争论Argument描述Required/OptionalconnectionThenameoftheconnectiontothecube.-AtextstringRequiredmember_expression......
  • SQL函数
    2023/09/041.LOCATE()//a.zz是adress表中为varchar的字段//返回'Ellin'字符串在字段zz中第一次出现的位置(从1开始)SELECTLOCATE('Ellin',a.zz)fromaddressa//返回'Ellin'字符串在字段zz中第20位置之后第一次出现的位置(从1开始,如果没有则显示0)SELECTLOCATE('Ellin',......
  • 微信JSSDK使用步骤
    官方文档地址:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#4在步骤三:通过config接口注入权限验证配置wx.config({debug:true,//开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打......
  • 泛微E-cology9 browser.jsp SQL注入漏洞QVD-2023-5012
    漏洞简介泛微e-cology9存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。影响版本泛微e-cologyV9<10.56漏洞复现fofa语法:app="泛微-协同商务系统"登录页面:POC:POST/mobile/%20/plugin/browser.jspHTTP/1.1Host:115.236.39.115:8088User-Agent:Mozilla/5.0(W......