如何制作私有或局部变量?

时间:2018-01-26 00:27:11

标签: javascript

所以我在这里检查了一个关于全局变量和局部变量的线程但是没有找到解决我问题的方法。我只想要一个私有或局部变量来增加,这样一个函数只会触发一次。我会粘贴我想要在这里实现的任何帮助都会非常感谢也请放轻松我对JavaScript我是全新的。这段代码有效,但变量I似乎在函数之间共享。

function phonefun(){
    
    i++;
    console.log(i);
    wage = wage - phone;
    console.log(wage);
    display();

    document.getElementById('phone').style.backgroundColor = "darkgrey";
}

function waterfun(){
    
    i++;
    console.log(i);
    wage = wage - water;
    console.log(wage);
    display();

    document.getElementById('water-aid').style.backgroundColor = "darkgrey";
}

5 个答案:

答案 0 :(得分:1)

你可以上课

WHERE othermovie1.title != mymovie.title AND num_density > 0

答案 1 :(得分:1)

要执行您想要的操作,您需要一个范围高于函数的变量,以便值可以在函数调用之间保持不变。当函数返回时,局部变量将被垃圾收集,因此,您的计数器将丢失。



var counter = 0;  // This variable exists in a higher scope than the function

function loanfun(){
    counter++;
    if (counter == 1) {
      console.log("function has run " + counter + " times.");
    }
}

loanfun();  // Will run
loanfun();  // Won't run




答案 2 :(得分:1)

您可以在对象中尝试命名空间:

var PageModule = {
    count: 0,

    loadfun: function (wage, loan) {
        PageModule.count += 1;

        if (PageModule.count === 1) {
            console.log('execute!');
            wage = wage - loan;
            console.log(wage);
            display();

            document.getElementById('loan').style.backgroundColor = "darkgrey";
        }

    }
};

PageModule.loadfun();
PageModule.loadfun();
PageModule.loadfun();

// if you want to attach the method to a button
document.getElementById('my-btn-id').addEventListener('click', PageModule.loadfun);

或者,您可以使用以下方法:

function myclickhandler () {
    // do whatever you want here ...

    //remove handler from button, so that the next button clicks will not do anything
    document.getElementById('my-btn-id').removeEventListener('click', myclickhandler);
}

// attach the method to a button
document.getElementById('my-btn-id').addEventListener('click', myclickhandler);

答案 3 :(得分:1)

  

...只需点击一下按钮即可调用该功能,我希望您这样做   只能按下按钮

我认为你要做的就是让你的事件处理程序在触发后解除绑定。 Thas比计算它被点击的次数要好得多。查看此链接,了解如何使用" vanilla"绑定和取消绑定事件处理程序。 JS:https://plainjs.com/javascript/events/binding-and-unbinding-of-event-handlers-12/

参考您之前的问题......

  1. 在函数内部创建的变量被称为"作用域"到该函数,这意味着该函数之外的任何内容都不能访问该变量。但是,通过在不使用varlet关键字(后者是ES6语法)的情况下初始化变量,您创建了一个隐式全局变量。这意味着当你希望它是函数作用域时,你无意中将它变成了一个全局变量。

  2. 声明变量不会自动指定零值。如果您未指定值,则值为undefined

  3. 如果您已经声明/分配了变量var i = 0;let i = 0;,那么您将拥有一个正确范围的变量,其初始值为0。问题是,每次执行该函数时,该值都将重置为零。为了获得价值,坚持"你必须创造国家。您可以通过使用getter和setter方法创建对象或使用闭包来实现。但是,unbind解决方案似乎是您想要在此处执行操作的最佳方式。

  4. 我希望这会有所帮助。

答案 4 :(得分:0)

希望这是你想要做的。但是如果你想简单地调用(调用)你只需要调用一次就可以执行,而且它只会被执行一次。

wage = 10;
loan = 5;
i=0; //this is the global variable
function loanfun(){
    let j = i +1; //j is local variable
    if (j === 1) {
        wage = wage - loan;
        console.log(wage);
        //display();
    
      document.getElementById('loan').style.backgroundColor = "darkgrey";
    }
}
loanfun(); //invoke the function here
<div id="loan">
    hi I am here working as expected
</div>