如何从JavaScript函数中获取值

How to get a value out of a JavaScript function?

本文关键字:获取 函数 JavaScript      更新时间:2023-09-26

我需要从JavaScript函数中获取行号:

function cap_check(){
    var row;
    $('td').change(function(){ 
        row = $(this).parent().parent().children().index($(this).parent());  
        alert(row);
    }); 
    alert(row);
}

功能中,row会被正确提醒。在函数之外,它是undefined

调用cap_check不可能向undefined以外的任何其他对象发出警报。函数不是静态对象。当您调用一个函数时,它会在内部堆栈上创建一个新实例。row将初始化为undefined,并且一个新的单击处理程序将绑定到td元素(也不太可能有用,因为每次调用cap_check时都会绑定另一个重复的事件处理程序)。

很可能,你想要这样的东西:

var cap_check=(function() {
    var row;
    $('td').change(function(){ 
        row = $(this).parent().parent().children().index($(this).parent());  
        alert(row);
    }); 
    return function() {
       alert(row);
    };
}());

这是一个自我执行的功能。当脚本运行时,函数中"返回"之前的部分会立即执行,创建一次事件绑定,并返回一个引用原始函数实例的函数。这将创建一个闭包,这意味着函数维护对其父对象(在本例中为row变量)的引用。因此,您的事件处理程序和作为cap_check返回的函数现在将始终引用row的同一实例。

因此,现在任何调用cap_check的代码都将始终返回作为change事件结果分配的相同值。

Fiddle:

http://jsfiddle.net/RagUe/5/

(请注意,我将事件更改为"单击"而不是"更改",以使其易于测试)。

是否应该将函数的剩余部分保留在更改函数中?

function cap_check(){
     var row;
             //-----------------------Jquery current table row  
     $('td').change(function(){ 
           row = $(this).parent().parent().children().index($(this).parent());  
           //rest of script here
         }); 
 }

$('td').change(function(){ })

Change允许您传递一个回调,该回调将在值更改时运行。

因此,仅仅通过附加回调,它不会运行它。它只会在值更改时运行。由于函数的其余部分在值更改之前运行,因此row的值未定义。

只需将脚本的其余部分放在回调中

函数内部的row与外部的行处于完全不同的范围。

因此,当您在change()函数之外时,row是未定义的,但一旦触发changerow就会得到一个值

function cap_check(){
    var row;
    $('td').change(function(){ 
        row = $(this).parent().parent().children().index($(this).parent());  
        alert(row); //only has a value on change
    }); 
    alert(row); //undefined
}