同一个变量问题

来源:7-9 JS对表单元素进行设置5

py_builder

2020-09-12 20:22:06

http://img.mukewang.com/climg/5f5cbc600929536914160770.jpg


如图所示,,,   为什么同一个变量,,而且在同一个作用域里面    会得出不一样的结果????

可以看那些 竖线,是在同一个函数里面的(我已经一再强调了),,  想不明白为什么会突然改变值了,,是js语法的问题吗??

layer.prompt({
    formType: 4
    ,title: '修改 单词  ['+ data.word +'] 的值 '
    ,value: data.word //输入框中的值
}, function(value, index){

    var flag=false;
    $.post("/uw"  , {"originalWord":data.word,  "updateWord":value } , function(json){
        if(json.code===0){

            flag=true;
            console.log(flag);      //  此处为 true
            layui.layer.msg('update successfully');
        }else{
            
            layui.layer.msg(json.message);
        }
    } ,"json");

    console.log(flag);   //  此处为 false
    if(flag){            //   false
        obj.update({
            word: value
        });
        layui.layer.msg("succeed");
        layer.close(index);
    }



});


写回答

1回答

慕丝1539783

2020-09-12

http://img.mukewang.com/climg/5f5cbfe308ac147209170456.jpg

给你一段java最基本的代码,自己体会一下,看到update()方法内flag报红没,提示找不到该变量。

同理$.post(  )这个也是一个方法,不能获取到该方法外面的定义的变量,除非把它作为参数传进去。

你肯定想问,为什么$.post(  )内部这个flag没有定义也没有报错?因为javascript不需要定义关键字,也可以直接赋值,如果没有定义关键字"var"或"let",则javascript认为这变量是一个全局变量,不是局部变量,也就是说$.post(  )内部的这个flag,是个全局变量(window对象的一个属性),你可以试着用window.flag获取该值。而外面的var flag=false;使用了var,则该flag是个局部变量,只这个变量所在的方法内有效(不会作用到$.post(  ))。

下面的if(flag),这个flag,在同时遇到局部变量flag和全局变量flag的情况下,优先使用局部变量flag,所以是false。

如果你想$.post(  )也可以获取外层的flag,最简单的方法,就是直接把外层的局部变量flag,改成全局变量flag。

var flag=false;

改成

flag=false;

应该是这样,懒得上机测试,凭记忆回答的,你试试吧。

1
hy_builder
h 厉害厉害!!! 直接说透彻了, 把我想问的,但我没问出口的问题也一并全回答了,谢谢!
h020-09-12
共1条回复

0 学习 · 16556 问题

查看课程