JavaScript变量赋值时为何自动执行?新手技术问询
为什么函数相关代码赋值给变量时会自动执行?怎么避免?
你的代码为什么会立即执行?
你写的代码里,console.log('hello')和prompt(...)都是直接调用函数——只要函数名后面跟了(),JavaScript就会立刻执行这个函数,不管它是不是在赋值语句里。赋值给变量的不是函数本身,而是函数执行后的返回值:
- 对于
let a = console.log('hello'):先执行console.log('hello')输出内容,然后把console.log的返回值(undefined)存到a里。所以你调用a的时候其实是在调用undefined,不会有任何输出。 - 对于
let answer = parseInt(prompt(...)):先执行prompt弹出输入框,拿到用户输入后传给parseInt处理,最后把处理后的结果存到answer里。
怎么把函数赋值给变量而不自动执行?
要存函数本身,而不是函数执行的结果,核心就是不要加()。如果需要绑定特定参数(比如固定输出'hello'),可以把逻辑包装成一个新的匿名函数:
示例1:包装console.log逻辑
// 箭头函数写法 let a = () => console.log('hello'); // 普通函数表达式写法 let a = function() { console.log('hello'); };
这时候a存储的是函数本身,只有调用a()的时候才会执行console.log输出内容。
示例2:包装prompt逻辑
let getAnswer = () => { return parseInt(prompt("Please enter the number you would like to FizzBuzz up to: ")); };
现在只有调用getAnswer()的时候,才会弹出输入框并返回解析后的数字,你可以把结果存到变量里:
let answer = getAnswer();
内容的提问来源于stack exchange,提问作者ofg
相关产品推荐
相关产品推荐

