- 1.函数申明
- syHi();
- function syHi() {
- console.log("HI!");
- }
- 2.函数表达式
- // sy();//此处会报错,sy是undefined
- var sy = function name() {
- console.log("sy");
- }
- sy();
都知道js中函数的定义有两种方式--函数表达式和函数申明
但是这两个是有区别的,函数申明js会在代码执行之前把申明读取,然后syHi也不会报错,
而函数表达式不一样,代码顺序执行,sy会报错。
这方面还是有些疑惑,所以去找了点资料。
FunctionDeclarations become ready-to-use functions. That allows to call a function before it’s declaration.
Variables start as undefined.All assignments happen later, when the execution reaches them
FunctionDeclarations变成可以使用的功能。 这允许在声明之前调用一个函数。
变量从未定义开始。
所有的任务都在稍后执行,当执行到达他们时
所以js会先遍历代码,遇到var会把变量提升为undefined,遇到有名函数也会提升,
但是遇到无名变量和不用var定义的变量会是在么样的呢?
AND有名函数提升之后,是怎么提升?(是只是有了函数这个名的空间地址,还是提升的时候也已经把函数内部代码加载)
syHi遇到之后,若提升的时候没有加载函数,是在遇到之后第一次加载内部代码吗?
不用var定义的变量,在执行到(eg:a = 1;)时才有a变量。
- //1.函数申明不用写在前面 而表达式一定要
- syHi();
- function syHi() {
- console.log("HI!");
- }
- // sy();
- var sy = function name() {
- console.log("sy");
- }
- sy();
- //2.对于变量var 与 无“var”区别
- if(a == undefined){
- var a = 1;
- console.log(a);
- }else {
- console.log("a not exist");
- }
- if (b == undefined) {//ReferenceError: b is not defined
- b = 1;
- console.log(b);
- } else {
- console.log("b not exist");
- }