函数作用域及函数表达式
Posted lznzxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数作用域及函数表达式相关的知识,希望对你有一定的参考价值。
一、函数作用域
在javascript中,作用域分为全局作用域及函数作用域(局部作用域);
例如:
var num = 100; function fun(){ console.log(num) var num1 = 200; function fun2(){ console.log(num1); } } fun()
执行后都会正常输出num及num1的值,
用var定义的变量,在函数外定义的为全局变量,在函数内定义的为局部变量,作用域有所不同,但全局变量是相对的,如上对num1的定义对函数内的fun2函数同样产生了全局变量的效果。
function fun (){ var num = 100; } fun(); console.log(num);
但如果是这样,在函数里面定义在函数外面输出,结果就是undefined。
function fun (){ num = 100; } fun(); console.log(num);
另外,如果变量不通过var来定义而是直接定义,那么就是一个全局变量,如上就会正常输出。
二、函数声明和函数表达式
1、函数声明和函数表达式分别是什么
我们常见的函数写法如 function fun(){ } 这样的称之为函数声明
fun = function (){ } 这样的称之为函数表达式
2、函数声明和函数表达式的区别
对于函数表达式而言,函数名可有可无,而对于声明函数,需通过函数名来调用;
函数表达式可以直接被执行符号执行:
var fun2 = function(){ //函数表达式 console.log("world"); }()
那么对于函数声明就不能这么执行了,但是,在函数声明前面加上+-!可以让函数声明变成函数表达式:
+function fun(){ //函数声明 console.log("hello"); }() // 在函数的前面可以加上+-!可以让函数声明变成函数表达式
3、立即执行函数
什么是立即执行函数:函数声明了以后直接自己执行,用函数的返回值,适合做初始化的工作。
如:
+function(){ //立即执行函数 console.log("hello") }()
这就是一个立即执行函数;
当立即执行函数中参数并没有给定的时候,输出参数为undefined
function fun(a,b){ console.log(a); console.log(b) } fun(3)
如上,输出的a为3,输出的b为undefined。
另外,例如:
var abc = "helloworld" (function(){ //写功能型的时候,在立即执行函数前面加上分号 console.log(456) })()
这样在运行的时候会报错,
在JavaScript中,一般情况未添加的“;”会自动补全,但是在写功能性的时候注意,在立即执行函数前面加“;”。
以上是关于函数作用域及函数表达式的主要内容,如果未能解决你的问题,请参考以下文章