【代码运行出现节点报错 _操作DOM 】 | IT修真院·坑乎
问题已收录 代码运行出现节点报错
我也踩过这个坑( 3 )
已统计您的踩坑,无需重复点击
回答(2)
操作DOM
详细描述
截图
代码
编辑于2024-05-02
  • [上海|荣耀师兄]JS-王刚
    1

    - -老哥你这书写顺序很有问题啊

    首先你声明了一个全局变量。

    var vacancy = []

    然后在方法内又声明了一个同名的局部变量

    function ranDomNum() {

        for(i = 0;i < d; i++){

        var vacancy = []; //同名变量!!

        var d = 9;

        var c = Math.round(Math.random()*(a.length));

        var a = [0,1,2,3,4,5,6,7,8];

        vacancy.push(a[c]);

        a.splice(c,1);

        }

        return vacancy;

    }

    方法内的局部变量会覆盖全局变量,而且这个变量只有在函数体内是有效的,出了函数就没了。

    而且- -你在for循环内声明同名的局部变量。

    这代表每次循环都会将变量vacancy 的值改为空数组[]。

    也就是说你这个数组vacancy在函数体内最后只有一个值。也就是最后循环获得的push添加的值。


    - -还有你for循环  for(i = 0;i < d; i++) 使用了变量d- -、这里的d是undefined。因为for括号内和循环体{}内是两个作用域。所以就获取不到变量d

    function ranDomNum() {

    var vacancy =[];

    var d = 9;

        for(i = 0;i < d; i++){

        var a = [0,1,2,3,4,5,6,7,8];

        var c = Math.round(Math.random()*(a.length));

        

        vacancy.push(a[c]);

        a.splice(c,1);


        };console.log(vacancy)

        return vacancy;

    }

    改成这样就能获得一个随机数组了- -、

    但是由于你用的是和全局变量的同名变量、所以全局变量vacancy这时候还是空[]。

    所以调用函数的时候

    var vacancy =ranDomNum() ;

    就能获得值了。

    这是因为你使用return 将局部变量做完这个函数的返回值了。

    如果你要在方法内更改全局变量的话。

    就需要将方法内的局部变量var vacancy =[];删掉

    编辑于2018-12-08
  • [深圳|结业弟子]JS-李韬
    0

    报错显示:"cannot  read  property",应该是没有被定义了。

    编辑于2018-09-21