同一个变量问题
来源:7-9 JS对表单元素进行设置5
py_builder
2020-09-12 20:22:06
如图所示,,, 为什么同一个变量,,而且在同一个作用域里面 会得出不一样的结果????
可以看那些 竖线,是在同一个函数里面的(我已经一再强调了),, 想不明白为什么会突然改变值了,,是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回答
给你一段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;
应该是这样,懒得上机测试,凭记忆回答的,你试试吧。
相似问题