diff --git a/JavaScript.md b/JavaScript.md index 1dfc8f5..22d0df5 100644 --- a/JavaScript.md +++ b/JavaScript.md @@ -1,3 +1,18 @@ +## name 变量名与 window.name + +```js +// 假设你想声明一个数字类型的 name +var name = 123; + +// 你以为它是数字,但它其实变成了字符串 +console.log(typeof name); // 输出: "string" ❌ +console.log(name + 1); // 输出: "1231" (字符串拼接,而不是数学加法) ❌ +``` + +在浏览器中,`var name = 123;` 实际上等同于 `window.name = 123;`。而 `window.name` 是一个内置属性,浏览器在底层会强制调用 `String(123)`,将其变为 `"123"`。 + +参考:[Window: name property - Web APIs | MDN](https://developer.mozilla.org/en-US/docs/Web/API/Window/name) + ## 交互:alert、prompt 和 confirm ```js @@ -226,7 +241,9 @@ alert( undefined == 0 ); // false JavaScript 中有四个逻辑运算符:`||`(或),`&&`(与),`!`(非),`??`(空值合并运算符)。 -### 或运算寻找第一个真值 +### 或运算 + +或运算:寻找**第一个真值**或**最后一个假值**。 一个或运算 `||` 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。 @@ -252,7 +269,9 @@ true || alert("not printed"); false || alert("printed"); ``` -### 与运算寻找第一个假值 +### 与运算 + +与运算:寻找第一个假值或最后一个真值 ```js // 如果第一个操作数是真值, @@ -410,3 +429,63 @@ alert( doNothing() === undefined ); // true ``` ## 函数表达式 + +在 JavaScript 中,函数不是“神奇的语言结构”,而是一种特殊的值。 + +函数声明语法: + +```js +function sayHi() { + alert( "Hello" ); +} + +alert(sayHi); // 显示函数代码 +``` + +函数表达式语法: + +```js +let sayHi = function() { + alert( "Hello" ); +}; + +alert(sayHi); // 显示函数代码 +``` + +### 回调函数 + +```js +function ask(question, yes, no) { + if (confirm(question)) yes() + else no(); +} + +function showOk() { + alert( "You agreed." ); +} + +function showCancel() { + alert( "You canceled the execution." ); +} + +// 用法:函数 showOk 和 showCancel 被作为参数传入到 ask +ask("Do you agree?", showOk, showCancel); +``` + +### 与函数声明区别 + +函数表达式是在代码执行到达时被创建,并且仅从那一刻起可用。 + +函数声明则不同,在函数声明被定义之前,它就可以被调用。这是内部算法的缘故。当 JavaScript 准备 运行脚本时,首先会在脚本中寻找全局函数声明,并创建这些函数。 + +## 箭头函数 + +```js +let func = (arg1, arg2, ..., argN) => expression; + + +let func = function(arg1, arg2, ..., argN) { + return expression; +}; +``` +