全局作用域和函数作用域
JS有两种作用域:全局作用域和函数作用域
- 内部的作用域能访问外部,反之不行。访问时从内向外依次查找。
jsvar a=10;//定义全局作用域 function add (){ var b = 20;//定义在函数作用域 b++; a++; console.log(a,b);// }- 如果在内部的作用域中访问了外部,则会产生闭包。
- 内部作用域能访问的外部,取决于函数定义的位置,和调用无关;
jsvar a = 10; function add(){ a++; } function test(){ var a = 40; add();//函数定义在全局作用域,自然访问的是全局的变量,和调用的位置无关。 console.log(a); } test();//20作用域内定义的变量、函数声明会提升到作用域顶部
js
console.log(a);//undefined
var a = 10;
function add (){
//...
}
//相当于
var a;
console.log(a);
a=10;
//函数表达式
consoloe.log(minus);//undefined 函数表达式是赋值给变量的,不会做提升。但是这里会变量提升
const minus = function () {
//
}面试题
js
//1. 下面的代码输出什么
console.log(a, b, c);//undefined undefined [Function: c]
var a = 1;
var b = function () { };
function c() { }
//2. 下面的代码输出什么
var a = 1,
b = 2;
function m1() {
console.log(a);
var a = 3;
function m2() {
console.log(a, b);
}
m2();
}
m1();
//undefined 3 2
//3. 下面的代码输出什么?(百度)
var a = 1;
function m1() {
a++;
}
function m2() {
var a = 2;
m1();
console.log(a);
}
m2();
console.log(a);
//主要考察的是加的哪个a,函数访问外部变量和调用的位置无关 2 2