一、创建函数3种方法
1 、函数声明
function 函数名(){
}
2 、函数表达式
var 函数名 = funciton(){
}
var fn = function(){
}
fn()
3、构造函数的创建
var 函数名 = new Function(){}
注意:函数声明和函数表达式的区别
1.函数声明可以在任意可见位置调用(即在函数定义的前面,后面都可以调用)
2函数表达式必须先定义后调用
3.函数声明可以预加载,也就是说函数声明有函数提升的作用
二、变量作用域!!!
用域分类:
全局作用域:
1.在任意位置都可以访问的范围(函数外部,函数内部都可以)
2.全局变量自动会追加到window对象下
局部作用域
与全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,在一些地方也会看到有人把这种作用域称为函数作用域。
如:
var color = "blue";
function getcolor(){
var color = "red";
return color;
}
alert(getcolor()); //red;
alert(color); //blue;
块级作用域
任何一对花括号 {} 中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。
如闭包:
闭包 在一个函数中定义的变量,当这个函数调用完后,变量会被销毁,我们可以用这个特性来模拟出JS的块级作用域。
function test (){
(function(){
for(var i=0; i<4; i++){
}
})()
alert(i)
}
test()
这时再次运行,会弹出‘i’未定义的错误,我们把for语句块放到了一个闭包之中,然后调用这个函数,当函数调用完毕,变量i自动销毁,因此,我们在块外便无法访问了。
作用域链:
当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain,不简称sc)来保证对执行环境有权访问的变量和函数的有序访问。作用域第一个对象始终是当前执行代码所在环境的变量对象(VO)
类似异步的面试题有几种问法:
你说一下JS的执行机制
同步:一行行执行,前面代码没执行完,就不会执行后面的程序
异步:Event Loop
JS是单线程的
JS中哪些操作会产生异步:定时器,dom事件绑定,ajax请求异步