Mnsin博客
立即登录 马上注册

在这个框架肆意的年代,前端娃是越来越淡化js基础了,很多东西也确实在工作中运用场景越来越少,但倘若面对面试,这些基础知识都是无法逃避的现实,下面记录下这几天和群里一起回炉学习的作用域相关知识。

一、关于作用域

1
2
3
4
5
6
7
8
9
10
function b() {
console.log(a);
var a = 10;
function 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;
= 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);

结果:310

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);
= 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)

小结

在函数里,单纯从变量申明权重来讲,函数变量名优先级最高 > 局部变量申明 > 函数形参

本站所有文章、图片、资源等如无特殊说明或标注,均为来自互联网或者站长原创,版权归原作者所有;仅作为个人学习、研究以及欣赏!如若本站内容侵犯了原著者的合法权益,可联系我们进行处理,邮箱:weiyong9898@163.com
赞(2) 打赏

上一篇:

下一篇:

相关推荐

谢谢你请我吃鸡腿*^_^*

支付宝扫一扫打赏

微信扫一扫打赏