我只是很好奇,为什么这段代码会起作用......
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]"
答案 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”之后返回了数组。
答案 4 :(得分:0)
任何语言中的大多数功能都是Accessors或Mutators。他们要么访问财产,要么改变财产或结构。在这种情况下,splice()都是。阅读特别是在JS中使用的所有函数的文档非常重要,因为它们有时会做多件事。
有时一个函数可能会被重载,其中一个版本是一个访问者,另一个版本是一个mutator。
每次将数组传递给函数时,请确保知道数组内容可能会发生什么。
Splice返回已删除的元素,同时更改数组的内容。返回值不是您传入的数组。这在多种语言中很常见,可以从数据结构中返回已删除的项目。