在这个框架肆意的年代,前端娃是越来越淡化js基础了,很多东西也确实在工作中运用场景越来越少,但倘若面对面试,这些基础知识都是无法逃避的现实,下面记录下这几天和群里一起回炉学习的作用域相关知识。
一、关于作用域
1 2 3 4 5 6 7 8 9 10
| function b() {
console.log(a);
var a = 10;
function a() { };
a = 100;
console.log(a);
}
b();
// 结果:ƒ a() { }和100 |
1 2 3 4 5 6 7 8 9 10
| function c() {
console.log(a);
function a() { };
var a = 10;
a = 100;
console.log(a);
}
c();
// 结果同上,依然还是ƒ a() { }和100 |
1 2 3 4 5 6 7 8
| var num = 99;
function d() {
console.log(num);
var num = 10;
}
d(100);
// 结果:undefined |
1 2 3 4 5 6 7 8
| var num = 99;
function d() {
console.log(num);
const num = 10;
}
d(100);
// 结果:Uncaught ReferenceError: Cannot access 'num' before initialization |
1 2 3 4 5 6 7
| (function e(num) {
console.log(num);
var num = 10;
function num() { };
}(100))
// 结果:ƒ num() { } |
1 2 3 4 5 6
| (function e(num) {
console.log(num);
var num = 10;
}(100))
// 结果:100 |
1 2 3 4 5 6 7
| var num = 100;
(function e() {
console.log(num);
var num = 10;
}(num))
// 结果:undefined |
1 2 3 4 5 6 7 8 9
| function b(x, y, z) {
console.log(z);
arguments[2] = 10;
console.log(z)
}
var c = 3;
b(1, 2, c);
结果:3和10 |
1 2 3 4 5 6 7 8 9 10
| function a(b) {
var b = 100;
console.log(b);
function b() {}
var b = 100;
console.log(b);
}
a(10);
// 答案:100和100 |
1 2 3 4 5 6 7 8 9
| function a(b) {
console.log(b);
function b() {}
var b = 100;
console.log(b);
}
a(10);
// 答案:ƒ b() { }和100 |
1 2 3 4 5 6 7 8
| var a = 10;
function a() {
console.log(a);
a = 100
}
a()
// 答案:报错,a不是一个函数,因为此时a=10 |
二、关于this
1 2 3 4 5 6 7 8 9 10
| var x = 10;
function foo() {
console.log(x)
}
(function () {
var x = 20;
foo();
})()
// 答案:10 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var length = 88;
function test(){
console.log('this',this)
console.log(this.length)
}
var obj = {
length:99,
action: function(test){
test();
arguments[0]();
}
}
obj.action(test,1,2,3,4)
// 答案:88和5,前面this指向是window,后面this指向arguments |
1 2 3 4 5 6 7 8 9 10 11 12
| var length = 88;
function test(){
console.log(this.length)
}
var obj = {
length:99,
action:test
}
obj.action()
// 答案:99 |
1 2 3 4 5 6 7 8 9
| var length = 88;
function test(){
console.log(this.length)
}
var arr = [test,1,2];
arr[0]();
// 答案:3,this指向arr |
三、其它杂项
function是不是js数据类型的一种?我认为是的,虽然网上众说纷纭,但你通过typeof或者intanceof去检测可知,事实上就是真正切切存在这个类型
1 2
| console.log(typeof function(){})
console.log(function(){} instanceof Function) |
小结
在函数里,单纯从变量申明权重来讲,函数变量名优先级最高 > 局部变量申明 > 函数形参
「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」
共 0 条评论关于"js面试题关于js基础的那些坑你还记得多少?"
最新评论