返回函数,返回javascript中的函数

时间:2015-11-22 02:42:51

标签: javascript

请问我的java脚本存在问题。

   start_clock_ws : function(){
            var that = this;
            ..decl


            function init(){
                if(socket.isReady() === true){
                    socket.send({ "time": 1});
                    console.log("clock started");
                }else{
                    console.log("The other guy");
                    console.log("The ready state is",socket.isReady());
                    return that.start_clock(); //Here is my issue
                }
            };   
           function responseMsg(response){
               ..decl  
            }
           this.run = function(){
                console.log("the parent fired");
                setInterval(init, 60000);
            };
            console.log("Its here");
            init();
            this.run();
            this.clock_started = true;
             socket.init({
                onmessage : function(msg){
                    var response = JSON.parse(msg.data);
                    console.log("It fires here first");
                    if (response && response.msg_type === 'time') {

                        responseMsg(response);
                    }
                }
            });

    },
start_clock : function(){
}

我的问题是上面的其他问题。我检查了我的isReady()的值,它是假的。然后我回到了start_clock。但是,当我执行时,它返回start_clock并继续并运行我的this.run。上面的return不应该强制它继续start_clock离开代码的其余部分吗?在它没有返回之前,它只是一个函数调用。然后我添加了返回希望它可以工作。同时调试。我注意到我的socket.onmessage函数被多次调用并且由于ws请求。然后我把它带到run以下的极端。

请帮助或解释将不胜感激。这对我来说很新,而且很难理解这个问题。

2 个答案:

答案 0 :(得分:0)

调用init函数时尝试此操作:

.validation-summary-errors ul li:nth-child(n+2) {
    display:none;
}

如果函数返回int值,那是因为你要返回一个函数而代码必须停止。但如果没有返回值(未定义),代码将继续。

我希望有所帮助!

答案 1 :(得分:0)

试试这个:

// Check if clock_started and if not then run following code.
if(!init()){
    this.run();
    this.clock_started = true;
    socket.init({
        onmessage : function(msg){
            var response = JSON.parse(msg.data);
            console.log("It fires here first");
            if (response && response.msg_type === 'time') {
                responseMsg(response);
            }
        }
    });
}

另外

function init(){
    if(socket.isReady() === true){
        socket.send({ "time": 1});
        console.log("clock started");

        return false; 
    }else{
        console.log("The other guy");
        console.log("The ready state is",socket.isReady());
        return that.start_clock(); //Here is my issue
    }
};   

为了解释的目的,我创建了一个简单的Fiddle

问题说明

Return用于将值返回给调用函数。您必须收到此值并相应地处理它。在你的代码中,你正在调用一个函数,但没有检查返回值,因此它会继续。

代码

function welcome(name){
	console.log("Hello " + name);
}

function permission(returnValue){
    var str = returnValue?"You may proceed.":"You may not.";
    console.log(str);
	return returnValue
}

function proceed(){
	console.log("Proceeding to next task.")
}

function run1(){
	welcome('foo');
    permission(false);
    proceed();
}

function run2(){
	welcome('foo');
    if(permission(false))
    	proceed()
    else
        console.log("Permission denied.");
}
<button onclick="run1()">Not Checking return value</button>
<button onclick="run2()">Checking return value</button>