Javascript——函数的命名,返回值,作用域,预解析

命名函数:函数如果有名字,就是命名函数
匿名函数:函数如果没有名字,就是匿名函数

函数表达式:把一个函数给一个变量,此时形成了函数表达式
var 变量=匿名函数;
例:

var f1=function(){
    
}

如果是函数表达式,那么此时前面的变量中存储的就是一个函数,而这个变量就相当于一个函数,就可以直接加小括号调用。

注意:函数表达式后面,赋值结束后,要加分号。

函数可以作为参数使用,如果一个函数作为参数,那么我们说这个参数(函数)可以叫回调函数;只要是看到一个函数作为参数使用了,那就是回调函数。

function sayHi(fn){
    console.log("HelloWorld");
    fn();//fn此时应该是一个函数
}
function sayHello(){
    console.log("你好啊")
}

函数作为返回值使用:

function f1(){
    console.log("f1函数调用了");
    return function(){
        console.log("我是一个函数");
    }}
var ff=f1();//调用
//ff就是一个函数了
ff();

函数的作用域:
全局变量:声明的变量是使用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用
除了函数以外,其他任何位置定义的变量都是全局变量。
局部变量:在函数内部定义的变量,是局部变量,外面不能使用。
全局变量:如果页面不关闭,就不会释放,就会占空间,消耗内存

全局作用域:全局变量的使用范围
局部作用域:局部变量的使用范围

块级作用域:一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但在JS中在这个块级作用域中定义的变量,外面也能使用。
说明:JS没有块级作用域,只有函数除外。

隐式全局变量:声明的变量没有var,就叫隐式全局变量
全局变量是不能被删除的,但是隐式全局变量是可以被删除的
定义变量使用var 是不会被删除的,没有var是可以删除的

预解析:提前解析代码,把变量的声明提前了,函数的声明也会被提前——都会被提前到当前所在作用域最上面。
预解析过程:
1.把变量的声明提升到当前作用域最前面,只会提升声明,不会提升赋值;
2.把函数的声明提升到当前作用域最前面,只会提升声明,不会提升调用;
3.先提升var,再提升function

扫描二维码关注公众号,回复: 6731185 查看本文章
var num;
console.log(num);
num=10;

函数调用的时候,会把函数的声明提升到作用域的上面

f1();//调用
var num=20;//这个变量的声明会提升到变量使用之前
function f1(){
    console.log(num);
    //var num=10;
}

预解析中,变量的提升,只会在当前作用域中提升,提前到当前作用域的最上面;
函数中的变量只会提前到函数作用域中的最前面,不会出去;
预解析会分段(多对的script标签中函数重名,预解析的时候不会冲突)

猜你喜欢

转载自blog.csdn.net/mintsolace/article/details/92012678