为什么现在这可以作为一个返回语句?

时间:2017-05-26 18:11:35

标签: javascript function

我只是很好奇,为什么这段代码会起作用......

DELIMITER $$
CREATE DEFINER=`somebody`@`%` PROCEDURE `test_proc`()
BEGIN

DECLARE done INT DEFAULT 0;
DECLARE tname TEXT DEFAULT "";

DECLARE exec_cur CURSOR FOR
    SELECT table_name
    FROM information_schema.COLUMNS    
    WHERE column_name = 'edit_time' 
    AND table_schema = 'homestead'
    ;

DECLARE CONTINUE HANDLER
FOR NOT FOUND SET done=1;

OPEN exec_cur;

exec_loop: LOOP
    FETCH exec_cur INTO tname;
    IF done THEN 
        LEAVE exec_loop; 
    END IF;

    SET @cmd = CONCAT("ALTER TABLE ", tname, " DROP edit_time;");

    PREPARE stmt FROM @cmd;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

END LOOP exec_loop;

END$$
DELIMITER ;

但这不是吗?我期望的结果是function slasher(arr, howMany) { arr.splice(0, howMany); return arr; } slasher([1, 2, 3], 2);

"[3]"

5 个答案:

答案 0 :(得分:3)

回答这些问题只需要咨询好的文档。我推荐Mozilla MDN - Array.splice()

  

splice()方法通过删除来更改数组的内容   现有元素和/或添加新元素。

     

返回值

     

包含已删除元素的数组。如果只有一个元素   删除后,返回一个元素的数组。如果没有元素   删除后,返回一个空数组。

它告诉我们这个方法就地更改了数组,即myArray.splice()直接改变/更改myArray而不是构建一个新数组并返回它。返回的值实际上是已删除元素的列表。

答案 1 :(得分:0)

function slasher(arr, howMany) {
  arr.splice(0, howMany);
  return arr;
}

slasher([1, 2, 3], 2);

这将首先拼接'给定的数组,实质上只是从数组中删除第一个howMany元素(2)。然后返回数组(现在它已经不同了,因为它已经删除了前2个元素),因此[3]

function slasher(arr, howMany) {
  return arr.splice(0, howMany);
}

slasher([1, 2, 3], 2);

这将返回原始拼接的结果。在文档中显示返回值https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice?v=control),这将返回从数组中删除的元素,因此[1, 2]

答案 2 :(得分:0)

@Sam,splice方法通过删除现有元素和/或添加新元素来更改数组(本身)的内容。因此,在第一个代码示例中,您得到了[3]。

但是,它返回一个包含已删除元素的数组。如果仅删除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组。

作为第二个代码示例的结果,您得到:[1,2]。

答案 3 :(得分:0)

这是因为Splice返回一个包含已删除元素的数组,而不是数组中的其余部分。通过返回arr,在“slashed”之后返回了数组。

来源:Splice at MDN

答案 4 :(得分:0)

任何语言中的大多数功能都是Accessors或Mutators。他们要么访问财产,要么改变财产或结构。在这种情况下,splice()都是。阅读特别是在JS中使用的所有函数的文档非常重要,因为它们有时会做多件事。

有时一个函数可能会被重载,其中一个版本是一个访问者,另一个版本是一个mutator。

每次将数组传递给函数时,请确保知道数组内容可能会发生什么。

Splice返回已删除的元素,同时更改数组的内容。返回值不是您传入的数组。这在多种语言中很常见,可以从数据结构中返回已删除的项目。