1. 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
- var twoSum = function(nums, target) {
- for(let i=0;i
length;i++) { - for(let j=1;j
length;j++) { - if (nums[i]+nums[j]===target) {
- return [i,j];
- }
- }
- }
- retrun [-1,-1];
- }
2.(1)给定一个整型参数 n,请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( n , n + 1 , n + 2 ,等等)。
示例 1:
输入:
n = 10
["call","call","call"]
输出:[10,11,12]
解释:
counter() = 10 // 第一次调用 counter(),返回 n。
counter() = 11 // 返回上次调用的值加 1。
counter() = 12 // 返回上次调用的值加 1。
- var createCounter = function(n) {
- return function() {
- return n++;
- };
- };
(2)要理解闭包,然后使用:
闭包概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
简单理解:闭包=内层函数+外层函数的变量
当一个函数定义在另一个函数内部,并且内部函数引用了外部函数作用域中的变量时,就会创建一个闭包。当内部函数从外部函数返回时,它会保留对外部函数作用域的引用,即使在外部函数执行完毕后,仍然可以继续访问这些变量。反之则不成立! 简单来说,闭包可以“记住”来自其外部函数作用域的值,并在以后使用它们,即使外部函数已经返回,而这些值通常已经超出范围。 什么时候使用闭包概念? 从定义中我们可以看到,它通常用于从外部父函数检索值,因此我们可以理解为闭包可以用来检索已经超出范围的“死”值。我们还可以理解它可以用于保护某些变量或函数。 因此,闭包对于创建私有变量和函数、实现部分函数应用以及在异步代码中保留状态非常有用。 每当在编写代码时遇到需要这类东西的情况时,都可以尝试引入闭包概念,即在程序员的语言中称为词法环境。
- const makeCounter = () => {
- let count = 0;
-
- return () => {
- count++;
- console.log(count);
- }
- }
-
- let counter = makeCounter();
- counter(); // 输出 1
- counter(); // 输出 2
- counter(); // 输出 3
在上面这个例子中,makeCounter 是一个箭头函数,它返回另一个箭头函数。返回的函数每次被调用时都会增加 count 变量的值,并将新 count 值打印到控制台。 当调用 makeCounter 时,它创建了一个包含 count 变量的新作用域,并将其初始化为 0。然后它返回一个新的箭头函数,该函数“封闭”了这个作用域,并在每次调用时递增 count 变量。 当我们将返回的箭头函数分配给 counter 变量时,我们创建了一个闭包,它保留了对 count 变量的引用。 每次调用 counter() 时,它都会递增 count 变量并打印新值,因为它仍然“封闭”着外部函数作用域中的原始 count 变量。 因此,由于 count 变量没有暴露在返回对象的外部,它是一个实际上只能通过 makeCounter() 方法进行访问或修改的私有变量。
- function add(x) {
- return function(y) {
- return x + y;
- }
- }
-
- let add5 = add(5);
- console.log(add5(3)); // 输出 8
在这个例子中,add() 函数返回了另一个接受单个参数的函数,该函数返回参数与外部函数作用域中的 x 值的总和。 这使我们能够通过传入 x 值并获取返回一个新函数来“部分应用” add() 函数。 这样我们就可以像使用任何其他函数一样使用新函数,根据需要传入不同的 y 值。
参考
作者:Allen_Xie
链接:https://leetcode.cn/problems/counter/
来源:力扣(LeetCode)