JS执行代码

图片描述

请问这段代码为什么会报错?

阅读 1.6k
3 个回答

var x = xx;这个表达式做了什么?他是先在内存中声明了一个变量,此时变量未作任何处理,所以值为undefined,然后会把右边的结果赋值给左边的变量。

用你的这个例子来讲,先在内存中声明了一个变量obj,然后看右边,右边是一个对象,所以会在堆内存中开辟一个空间,保存该对象,读取到name:'js'的时候会为对象的name属性赋值'js',当读取到下一行的时候,因为can属性所对应的是一个立即执行函数,所以会先得到函数的值,再赋值给can属性,那么这个函数里面做了什么呢?这个函数首先打印了obj,此时obj刚刚声明,还未被赋值,所以为undefined,所以读取下一行obj.name的时候抛出错误。

你想要实现这样吧

闭包写法

  var obj = function () {
        var name = 'js';

        var dofun = function () {

        };
        return can = (function () {
            // console.log(obj);
            return name;

        })();
    }
    console.log(obj(), '1');

类写法

class OBJ {
        constructor() {
            this.name = 'js';
        }

        can() {
            return this.name;
        }


        do() {


        }
    }
    var ob=new OBJ()

    console.log(ob.can(), '2');
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题