Функции JavaScript «закрывают» область, к которой они имеют доступ при объявлении, и сохраняют доступ к этой области, даже если переменные в этой области меняются.
var funcs = []
for (var i = 0; i < 3; i += 1) {
funcs[i] = function () {
console.log(i)
}
}
for (var k = 0; k < 3; k += 1) {
funcs[k]()
}
Каждая функция в массиве выше закрывается по глобальной области (глобальная, просто потому, что это область видимости, в которой они объявлены).
Позже эти функции вызывают наибольшую регистрацию текущее значение i
в глобальной области. Это волшебство и разочарование закрытия.
«Функции JavaScript закрываются по области, в которой они объявлены, и сохраняют доступ к этой области, даже если переменные значения внутри этой области изменяются».
Использование let
вместо var
решает это, создавая новую область каждый раз, когда цикл for
запускается, создавая выделенную область для каждой функции для закрытия. Различные другие методы делают то же самое с дополнительными функциями.
var funcs = []
for (let i = 0; i < 3; i += 1) {
funcs[i] = function () {
console.log(i)
}
}
for (var k = 0; k < 3; k += 1) {
funcs[k]()
}
(let
делает переменные, которые ограничены областью, а не областью действия функции. Блоки обозначаются фигурными фигурными скобками, но в случае цикла for переменная инициализации i
в нашем случае считается объявленной в фигурных скобках.)
Изменить: это проще:
=REGEXEXTRACT(A1,"[^/]+$")
Вы можете использовать эту формулу:
=REGEXEXTRACT(A1,"(?:.*/)(.*)$")
А также возможно используйте его как ArrayFormula:
=ARRAYFORMULA(REGEXEXTRACT(A1:A3,"(?:.*/)(.*)$"))
Вот еще одна информация:
Эта формула будет делать то же самое:
=INDEX(SPLIT(A1,"/"),LEN(A1)-len(SUBSTITUTE(A1,"/","")))
Но он принимает A1 три раза, что не является prefferable.
Также возможно, возможно, лучше всего на копии, с помощью Find:
.+/
(Replace with
blank) и Search using regular expressions
отмечено галочкой.