作用域与闭包
来源:互联网 发布:莉娜因巴斯 知乎 编辑:程序博客网 时间:2024/04/28 06:33
作用域与闭包
变量的作用域
变量的作用域指的是:变量起作用的范围。
javascript 的变量依据作用域的范围分为:
1.全局变量
2.局部变量
全局变量
定义在函数外的变量都是全局变量
<script> alert(a); var a = 10;<script>
局部变量
在函数内声明的变量是局部变量,所以形参的变量也是局部变量
在函数的外部不能访问局部变量
<script> function f(){ alert(v);//没有声明,所以结果为underfind var v = "abc";//声明变量 alert(v);//弹出"abc"} alert(v)//报错,在函数外部不能访问局部变量<script>
关于执行环境
在全局变量的执行环境中,有一个变量对象,这个变量对象把这个执行环境中定义的变量存储为这个变量对象的一个属性,访问变量,就相当于访问变量对象的一个属性。
在全局的执行环境中,变量对象就是window。
任何的函数都有一个属性:[[scope]]
<script> function foo(){ var a = 20; console.log(a);}var s = "hello World"console.log(s.replace(/[ ](\w)/gi, " $1".toUpperCase()));<script>
作用域链
作用域链与一个执行环境有关,作用域用于在变量查找
!C:\Users\Administrator\Desktop\JS-面向对象\Day5 作用域和闭包\Advanced_Day05
闭包
闭包可以分为广义上的闭包,也可以是狭义上的闭包。
广义上的闭包:
只要一个函数,访问过这个函数外的变量,那这个函数就是闭包。
狭义上的闭包:
如果一个函数,访问过它的外部函数的局部变量,那这个函数就是闭包
闭包的特点
闭包能够访问外部函数作用域内的所有变量,而且访问的变量是最新的变量,即使外部的函数执行结束了,它依然能够访问外部的局部变量。
<script> var a = 10; function foo(){ var = 20; function f() return b; } b = 30; return f();}var b = foo()();console.log(b);<script>
使用闭包封装对象
<script> function foo(){ name:"李四"; age:20;}return { getName:function(){ return p.name; }, getAge:function(){ return 20; }, setName:function(name){ p.name = name; }, setArrt:function(key,value){ p[key] = value; }, getArrt:function(key){ return p[key]; }} var p = foo(); p.setName("滴滴答"); console.log(p.getName()); p.setArrt("sex","男"); console.log(p.getArrt("sex"));<script>
闭包 常见的for循环问题
常见的循环赋值问题
<button>按钮1<button><button>按钮1<button><button>按钮1<button> <script> var btn = document.querySelectorAll('button'); for(let i=0;i<btn.length;i++){ btn[i].onclick = function(){ console.log(i); } } <script>
常见的高阶函数
高阶函数, 是函数式编程语言的一个非常重要的特点。
如果一个高阶函数接受一个或多个函数作为参数, 或者可以返回一个函数, 则这样的函数就叫高阶函数。
map:
<script> var arr = [1,2,3,4,5]; var a1 = arr.map(function(x){ return x*x; }) console.log(arr.map(Matn.sqrt)); console.log(a1)<script>
reduce:
10!的阶乘
<script> var arr = [1,2,3,4,5]; var a1 = arr.reduce(function(a,ele){ return a *ele; },1) console.log(a1);<script>
filter: 过滤
<script> var arr = [1,2,3,4,5,6,7,8,9,10]; var a1 = arr.filter(function(ele,index,arry){ return ele%2==1; }) console.log(a1);<script>
阅读全文
0 0
- 作用域与闭包
- 作用域与闭包
- 作用域与闭包
- 作用域与闭包
- javascript函数作用域与闭包
- 深入浅出闭包与作用域链
- 深入浅出闭包与作用域链
- 作用域链与闭包
- JQuery_JavaScript___闭包与作用域
- Javascript 闭包与作用域
- 闭包与作用域链
- Javascript闭包与作用域
- JavaScript闭包作用域与this
- Javascript中的闭包与作用域
- javascript作用域与闭包
- js作用域与闭包
- JavaScript作用域链与闭包
- javascript作用域与闭包
- TCP建立连接为什么需要三次握手而结束要四次
- CSDN博客怎么转载?
- boostrap 搜索框typeahead自动补全
- Java 网络通信 — 使用线程池搭建TCP BIO通信服务器
- sql
- 作用域与闭包
- CentOS之设定界面和命令行启动-yellowcong
- windows下运行tensorboard
- 类反射的基本用法
- 1042. 字符统计(20)
- 数据结构学习笔记3
- react-native 简单的react-redux创建
- 第一篇博客,对人生的一个全新的规划
- 数据挖掘中的利器--XGBoost理论篇