作用域与闭包
来源:互联网 发布:同行业数据查询 编辑:程序博客网 时间:2024/04/29 01:10
执行上下文
范围:一段<script>或者一个函数
全局:变量定义、函数声明 (一段<script>)
函数:变量定义、函数声明、this、arguments (函数)
PS:注意“函数声明”和“函数表达式”的区别
console.log(a);
var a = 100;
fn('zhangsan');
function fn(name) {
age = 20;
console.log(name, age);
var age;
}
this
this要在执行是才能确认值,定义是无法确认
var a = {
name: 'A';
fn: function () {
console.log(this.name);
}
}
a.fn(); // this === a
a.fn.call({name: 'B'}); //this ==== {name: 'B'}
var fn1 = a.fn;
fn1(); //this === window
作为构造函数执行
function Foo(name) {
this.name = name;
return this;
}
var f = new Foo('zhangsan');
作为对象属性执行
var obj = {
name: 'A';
printName: function (){
console.log(this.name);
}
}
obj.printName;
作为普通函数执行
function fn() {
console.log(this);
}
fn();
call apply bind
function fn1(name, age) {
alert(name);
console.log(this);
}
fn1.call({x: 100}, 'zhangsan', 20);
作用域
没有块级作用域
只有函数和全局作用域
作用域链
闭包
闭包的使用场景
函数作为返回值
function F1() {
var a = 100;
//返回一个函数(函数作为返回值)
return function () {
console.log(1);
}
}
//f1得到一个函数
var f1 = F1();
var a = 200;
f1();
函数作为参数传递
范围:一段<script>或者一个函数
全局:变量定义、函数声明 (一段<script>)
函数:变量定义、函数声明、this、arguments (函数)
PS:注意“函数声明”和“函数表达式”的区别
console.log(a);
var a = 100;
fn('zhangsan');
function fn(name) {
age = 20;
console.log(name, age);
var age;
}
this
this要在执行是才能确认值,定义是无法确认
var a = {
name: 'A';
fn: function () {
console.log(this.name);
}
}
a.fn(); // this === a
a.fn.call({name: 'B'}); //this ==== {name: 'B'}
var fn1 = a.fn;
fn1(); //this === window
作为构造函数执行
function Foo(name) {
this.name = name;
return this;
}
var f = new Foo('zhangsan');
作为对象属性执行
var obj = {
name: 'A';
printName: function (){
console.log(this.name);
}
}
obj.printName;
作为普通函数执行
function fn() {
console.log(this);
}
fn();
call apply bind
function fn1(name, age) {
alert(name);
console.log(this);
}
fn1.call({x: 100}, 'zhangsan', 20);
作用域
没有块级作用域
只有函数和全局作用域
作用域链
闭包
闭包的使用场景
函数作为返回值
function F1() {
var a = 100;
//返回一个函数(函数作为返回值)
return function () {
console.log(1);
}
}
//f1得到一个函数
var f1 = F1();
var a = 200;
f1();
函数作为参数传递
阅读全文
0 0
- 作用域与闭包
- 作用域与闭包
- 作用域与闭包
- 作用域与闭包
- javascript函数作用域与闭包
- 深入浅出闭包与作用域链
- 深入浅出闭包与作用域链
- 作用域链与闭包
- JQuery_JavaScript___闭包与作用域
- Javascript 闭包与作用域
- 闭包与作用域链
- Javascript闭包与作用域
- JavaScript闭包作用域与this
- Javascript中的闭包与作用域
- javascript作用域与闭包
- js作用域与闭包
- JavaScript作用域链与闭包
- javascript作用域与闭包
- 货拉拉APP系统 软件开发
- Numpy入门学习之(四)矩阵分解简介
- zoj 2412 Farm Irrigation
- canvas学习总结五:线段的端点与连接点
- VB 6.0时间戳和时间互转
- 作用域与闭包
- 20170731自动化部署ansiable(一)
- 7.31 D
- bash: 一键apt-get更新
- 机器学习九 python matplotlib
- Redis配置和常用命令
- COOKIE
- 宏定义交换函数-交换两个数的值
- QT中的.pro文件,以及.pri .prj .prl文件说明