无法访问嵌套函数内已更改的变量值

时间:2018-11-07 14:40:31

标签: javascript nested closures

我在以下两个函数中都具有强大的业务逻辑,但遇到了一个问题。我知道它与关闭有关,但是我不知道如何解决。你可以通过一些光线吗?

<TextField
 className={classes.TextField}
 id="input-with-icon-textfield"
 label="Zoeken"
 InputProps={{
 startAdornment: (
                  <InputAdornment position="start">
                         <Search />
                  </InputAdornment>
                                  ),
                 }}
 onChange={(e) => {this.setTextFilter(e.target.value);}}
 />

我原来的问题如下

function func1() {                
                var x = false;
                console.log('before going inside func '+x);
                func2(x); 
                console.log('After coming outside => '+x);
 //Instead of true its displaying false
            
}

function func2(x)
{
              x = true;
              console.log('inside func => '+ x);
}

func1();

1 个答案:

答案 0 :(得分:1)

Vue.component('greeting', { props: ['name'], template: '<h1>Welcome {{ name }} !</h1>', mounted () { setTimeout(() => { this.$emit('some-event') }, 2000) } }); Vue.component('other-component', { template: '<h1>Welcome to Other Component</h1>' }) // create a new Vue instance and mount it to our div element above with the id of app var vm = new Vue({ el: '#app', data: { componentToUse: 'greeting' }, methods: { handleOtherComponentEvent () { console.log('Hello World from other component listener') }, handleGreetingComponentEvent () { console.log('Hello World from greeting component event listener') } }, computed: { listeners () { if (this.componentToUse === 'greeting') { return { 'some-event': this.handleOtherComponentEvent } } else if (this.componentToUse === 'other-component') { return { 'some-greeting-event': this.handleGreetingComponentEvent } } return {} }, attributes () { if (this.componentToUse === 'greeting') { return { 'name': 'Hammerbot' } } return {} } } }); 的{​​{1}}参数与x中的func2变量完全不同。当您执行x时,func1将传递给func2(x),而不是对变量的某种引用。 (某些语言可以做到这一点; JavaScript不能。)

要从函数中返回信息,请在函数中使用x,并在调用它的位置使用函数的返回值:

func2

使用return中的function func1() { var x = false; console.log('before ' + x); x = func2(x); // *** Note `x =` console.log('after ' + x); } function func2(x) { return true; } func1();的值也许是一个更好的示例:

x

如果您要返回复杂信息,请返回一个具有复杂信息属性的对象(或传递一个对象,并在其上填充func2属性,这取决于用例[以及是否'坚持不变性范例)。