JavaScript常见问题

1. const, let, var的区别
const:变量不可修改,必须初始化
var:变量可以修改,不初始化输出undefined,不会报错
let:块级作用域,函数内部使用let定义后,对函数外部无影响

2. 关于立即执行函数(IIFE,Immediately Invoked Function Expression)
常见函数形式:

function test() { // 1. 函数声明
    console.log("hello world!");
}
// 通过()来调用此函数
test();

function() { // 2. 匿名函数声明
    console.log("hello world!");
}

var test = function() { // 3. 函数表达式
    console.log("hello world!");
}
// 通过()来调用此函数
test();

var test = function test() { // 4. 函数表达式(函数名随意)
    console.log("hello world!");
}

var val = { // 5. 函数表达式
 myFunction: function () { /* logic here */ }
};

// 立即执行函数常见形式
(function(){...})()
(function(){...}())
// 其他
!function(){}();
+function(){}();
-function(){}();
~function(){}();
new function(){ /* code */ }
new function(){ /* code */ }() // 只有传递参数时,才需要最后的圆括号

立即执行函数的模式本质上是函数表达式(命名或匿名的),其目的在于:
一是不必为函数命名,避免了污染全局变量 ;
二是IIFE内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
样例:

(function($){  
    //插件实现代码,jquery是该匿名函数的参数
})(jQuery);

3. JS中call,apply,bind方法
主要作用是改变函数中的this指向。
call()
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象
apply()
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
bind()
语法:bind(thisArg[, arg1[, arg2[, …]]])
定义:创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。

猜你喜欢

转载自blog.csdn.net/anneCoder/article/details/80841234