uni之this作用域

简介:

目录介绍

  • 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');
            }
        });
    },
目录
相关文章
|
6月前
|
JavaScript 前端开发
uniapp如何定义全局变量?
uniapp如何定义全局变量?
352 0
|
11天前
|
自然语言处理 JavaScript 前端开发
[JS]作用域的“生产者”——词法作用域
本文介绍了JavaScript中的作用域模型与作用域,包括词法作用域和动态作用域的区别,以及全局作用域、函数作用域和块级作用域的特点。通过具体示例详细解析了变量提升、块级作用域中的暂时性死区等问题,并探讨了如何在循环中使用`var`和`let`的不同效果。最后,介绍了两种可以“欺骗”词法作用域的方法:`eval(str)`和`with(obj)`。文章结合了多位博主的总结,帮助读者更快速、便捷地掌握这些知识点。
22 2
[JS]作用域的“生产者”——词法作用域
|
3月前
|
JavaScript 前端开发
JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
这篇文章介绍了JavaScript中对象的基本概念和操作,包括对象属性和方法的使用、对象字面量的创建、函数的定义和作用域的概念,以及全局作用域和局部作用域的区别和特性。
JavaScript基础&实战(4)js中的对象、函数、全局作用域和局部作用域
|
6月前
|
存储 JavaScript
vue项目中定义全局变量、函数的几种方法
vue项目中定义全局变量、函数的几种方法
209 1
|
6月前
|
JavaScript 前端开发
JS作用域与作用域链
JS作用域与作用域链
|
6月前
uni-app 4.11封装全局mixin
uni-app 4.11封装全局mixin
80 0
|
6月前
|
JavaScript
JS作用域(全局作用域+局部作用域)
JS作用域(全局作用域+局部作用域)
33 0
|
6月前
|
存储 JavaScript 小程序
uni-app 全局变量实现的4种方式
uni-app 全局变量实现的4种方式
202 0
|
JavaScript
Vue3中怎么设置全局变量
Vue3中怎么设置全局变量
|
存储 JavaScript 前端开发
Javascript作用域 (局部作用域和全局作用域) 详细介绍
Javascript作用域 (局部作用域和全局作用域) 详细介绍
109 0