美文网首页
uni之this作用域

uni之this作用域

作者: 杨充211 | 来源:发表于2020-05-18 18:40 被阅读0次

目录介绍

  • 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作用域

    目录介绍 01.先看一个案例 02.看一下解决方案 01.先看一个案例 代码如下所示发现了点击按钮1可以更新tit...

  • 执行上下文、作用域链、this、闭包

    javascript 执行的是词法作用域,即静态作用域。与之相对的是动态作用域。 静态作用域:函数的作用域在函数定...

  • js基础6(作用域、js解析顺序)

    1、作用域 作用域用于就是变量访问性问题 全局作用域在script其实标签到结束标签都是在全局作用域里,在函数体之...

  • JavaScript深入系列的学习(一)

    JavaScript深入之从原型到原型链JavaScript深入之词法作用域和动态作用域JavaScript深入之...

  • js面试题

    1、let、var、const区别 1、作用域不同,var是函数作用域,而let是块作用域2、 let不能在定义之...

  • js作用域

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 作用域,作用域链

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • 作用域

    词法作用域,动态作用域,全局作用域,局部作用域,函数作用域,块级作用域,有些地方还能看到隐式作用域和显示作用域。 ...

网友评论

      本文标题:uni之this作用域

      本文链接:https://www.haomeiwen.com/subject/hlepohtx.html