目录介绍

  • 01.先看一个案例
  • 02.看一下解决方案

01.先看一个案例

  • 代码如下所示

    • 发现了点击按钮1可以更新title内容,但是点击按钮2却无法更新title内容。这个究竟是为什么呢?
    <template>
    <view class="container">
    <text>{{title}}</text>
    <button type="default" @click="changeTitle1">改变标题内容按钮1</button>
    <button type="default" @click="changeTitle2">改变标题内容按钮2</button>
    </view>
    </template> <script>
    export default{
    data(){
    return{
    title : "这个是标题",
    }
    },
    methods:{
    changeTitle1(){
    this.title = "改变标题1";
    },
    //可以发现下面这个执行了success方法,但是调用this赋值却无法改变内容
    changeTitle2(){
    uni.setStorage({
    key: 'storage_key',
    data: 'hello',
    success: function () {
    this.title = "改变标题2";
    console.log('changeTitle2------success');
    }
    });
    },
    }
    }
    </script> <style>
    .container{
    display: flex;
    flex-flow: column;
    }
    </style>
  • 为什么changeTitle2无法改变title内容
    • 在changeTitle2方法的success方法中,该success方法指向闭包,所以this属于闭包,由此在success回调函数里是不能直接使用this.title的。

02.看一下解决方案

  • 可以发现这样操作就可以解决作用域问题
  • 第一种解决方案
    • 解决办法就是在闭包之外先把this赋值给另一个变量
    //可以发现这样操作就可以解决作用域问题
    changeTitle3(){
    //赋值
    var me = this;
    uni.setStorage({
    key: 'storage_key',
    data: 'hello',
    success: function () {
    me.title = "改变标题3";
    console.log('changeTitle2------success');
    }
    });
    },
  • 第二种解决方案
    • 使用箭头函数也可以解决该问题,思考一下这是为什么?
    changeTitle4(){
    uni.setStorage({
    key: 'storage_key',
    data: 'hello',
    success:() => {
    this.title = "改变标题4";
    console.log('changeTitle2------success');
    }
    });
    },

uni之this作用域的更多相关文章

  1. Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收

    执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...

  2. JS核心系列:浅谈函数的作用域

    一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...

  3. JavaScript模仿块级作用域

    avaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for ( ...

  4. Spring中Bean的作用域、生命周期

                                   Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...

  5. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  6. ES6(块级作用域)

    我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...

  7. JavaScript基础学习-函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...

  8. 深入理解javascript函数定义与函数作用域

    最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径 ...

  9. JavaScript作用域

    JavaScript作用域 JavaScript作用域一直是前端开发的难题,现在只要用五句话就可解决. 一.“JavaScript中无块级作用域” 在Java或C#中存在块级作用域,即:大括号也是一个 ...

  10. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

随机推荐

  1. 《ASP.NET Core 微服务实战》-- 读书笔记(第5章)

    第 5 章 创建数据服务 选择一种数据存储 由于我坚持要尽可能的跨平台,所以我决定选用 Postgres,而不用 SQL Server 以照顾 Linux 或 Mac 电脑的读者 构建 Postgre ...

  2. UVA1108 Mining Your Own Business 题解

    题目传送门 题意 在一个无向图上选择尽量少的点涂黑,使得删除任意一个点后,每个连通分量里都至少有一个黑点(多组数据). 正文 观察题意,发现这是个 Tarjan 求点双连通分量的板子. 考虑在求点双连 ...

  3. push竟比concat快上数百倍?记一个concat在十万级数据引发的性能问题

    壹 ❀ 引 公司产品一直在做企业项目研发工具,所以我们自己当然也会用自己的产品去管理公司大小项目,但在此之前,项目管理体验上一直存在一个卡顿问题.比如我刚登录上账号,在项目里随便到处点点到处跳转页面, ...

  4. NC16856 [NOI1999]钉子和小球.md

    题目链接 题目 题目描述 有一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1).每颗钉子和周围的钉子的距离都等于d,每个格子的宽度也都等于d,且除了最左 ...

  5. NVME(学习笔记二)—CMB

    什么是CMB 在NVMe Express 1.2 Spec中开始支持一个特性,那就是CMB(Controller Memory Buffer),是指SSD控制器内部的读写存储缓冲区,与HMB(Host ...

  6. Js遍历对象总结

    Js遍历对象总结 Js遍历对象的方法主要有for in.Object.keys().Object.getOwnPropertyNames().Reflect.ownKeys().Object.getO ...

  7. 将字符串"a,b,c"以逗号分隔转换为数组并打印

    主要利用了String的split方法. package com.dylan.test; /** * @author xusucheng * @create 2017-12-22 **/ public ...

  8. 马上就要元宵节了,这里给大家用css端上一碗汤圆

    「更多福利资讯查看:2024 首次大厂挑战」. ` .... ` .bowl_wrap{ width: 200px; height: 220px; margin: 100px auto; positi ...

  9. win32 - 将文件的访问权限给特定的用户

    需要首先获取特定用户的SID. 这是一些步骤, 验证输入参数. 为可能足够大的SID和域名创建缓冲区. 在循环中,调用LookupAccountName以检索提供的帐户名的SID.如果SID的缓冲区或 ...

  10. 从图纸到BIM到数字孪生城市(元宇宙),易如反掌!

    当智能建模平台与虚幻引擎相遇时,它们又能碰撞出怎样的火花呢? 智能建模怎么玩? 以南昌某职业学院项目为例,这个项目总共有16栋楼,我们直接用智能建模平台"bim.zonst.com" ...