作用域-基础知识总结------彭记(07)

作用域

1.变量起作用的范围

-一个变量的作用域就是从这个变量定义开始到这个变量所在的{}结束

2.在js中,只有函数可以创建作用域

-没有块级作用域--意味着在if或者for中定义的变量在它们的外部也能够访问

-变量获取遵守变量搜索原则

-不关注什么时候调用,只关注在什么位置创建

3.词法作用域(静态作用域):

-根据代码的书写结构去确定变量的作用范围,与调用没有关系。意味着在使用一个变量的时候,首先在自己的作用域中查找,如果没有就去上一级作用域中查找

例:var age =20;

function test(){

  cosole.log(age);

}

function test2(){

  var age=40;

  test();

}

test2();//20

函数的作用域链:

1.在函数中可以嵌套函数,这样就形成了作用域中嵌套另一作用域,就形成了作用域链

2.作用域中变量的搜索原则:

a)首先在当前使用变量的作用域中查找,如果找到就使用,否则查找上一级作用域

b)查找上一级作用域,如果找到就使用,否则再查找上一级作用域

c)如果没有,就一直沿着作用域往上找,直到找到全局的作用域为止

3.访问规则:内层作用域可以访问外层作用域的变量,外层作用域不能直接访问内层作用域中的变量

例:var num;

function f1(){

  var num;

  function f2(){

    console.log(num);//123

  }

  num=123;

  f2();

}

num=234;

f1();

时间: 2024-10-17 08:16:35

作用域-基础知识总结------彭记(07)的相关文章

严格模式-基础知识总结------彭记(015)

严格模式 <script> /*严格模式*/ "use strict"; /*如果同时定义多个同名的变量,后面的将前面的覆盖*/ /*var age = 20; var age = 30; console.log(age); /!*1.Duplicate parameter name not allowed in this context:函数中不能定义多个同名的形参*!/ function test(age,age){ console.log(age); } test(1

闭包-基础知识总结------彭记(011)

闭包 -什么是闭包:就是函数内部的函数 -就是指函数,只有函数才能实现闭包,原因就是因为函数可以创建作用域,在函数每部成员在函数的外部不能访问 -闭:封装 -包:包裹,包装 -闭包的作用:因为函数内部的成员不能直接被函数外部访问和使用,那么我们就可以在函数内部创建一些函数来进行变量的操作,之后将这些操作返回给外部使用.这就是闭包-闭包就是解决在函数外部使用函数内部声明的成员的问题,说白了,它就是函数内部进行关联的桥梁 /*function test(){ var age = 20; consol

事件流,事件捕获与事件冒泡-基础知识总结------彭记(018)

事件流: -事件流包括三个阶段-事件捕获阶段.处于目标阶段和事件冒泡阶段. -首先发生的是事件捕获,为截获事件提供了机会,然后是实际的目标接收到事件,最后一个阶段是冒泡阶段,可以在这个阶段对事件做出响应. 事件冒泡: -事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档). <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

递归-基础知识总结------彭记(06)

递归 -在程序中,递归就是函数自己直接或者间接调用自己. -就递归而言最重要的就是跳出结构,因为跳出了才可以有结果. 化归思想: -将一个问题由难化易,由繁化简 ,由复杂化简单的过程称为化归,它是转化和归结的简称. -递归思想就是将一个问题转换为一个已解决的问题来实现 -假如有一个函数'f',如果它是递归函数的话,那么也就是说函数体内的问题还是转换为'f'的形式. 例如:求1~100的和? function foo(n){ return n +foo(n-1); } 上面就是利用了化归思想: -

js中eval,arguments与异常处理的用法-基础知识总结------彭记(017)

eval的使用: <script> /*eval的作用: * 1.将字符串当成js代码来执行 * 2.可以将json格式的字符串转换为js对象*/ /*eval("var age = 30;"); console.log(age); eval("alert(123)"); var va = eval("1+1"); console.log(va);*/ //({"name":"rose",&qu

面向对象的三大特性之继承-基础知识总结------彭记(05)

面向对象的三大特性之继承: js中的某些对象没有一些需要的属性和方法,但是另外的对象有,那么拿过使用,就是继承. js中继承的实现方式: 1.混入式继承:通过循环将一个对象中的所有属性和方法混入到另外一个对象中: var me={ work:function(){ console.log('敲代码'): } }: var mayun={ money:9999999, car:'000', manager:function(){ console.log('管理巴巴...'); } } /*遍历,让

js中in运算符,forEach与map的用法-基础知识总结------彭记(016)

in运算符: <script> /*1.能够遍历对象的属性*/ var obj = { 'name':'jack', age:20 }; for(var key in obj){ console.log(key + ":" + obj[key]); } /*2.还可以判断 对象 是否可以访问某个属性,而不关注这个属性是否在当前对象中定义*/ console.log('name' in obj); //true console.log('toString' in obj);

编程必备基础知识|计算机组成原理篇(07):计算机的总线

计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁杂,但无论是相关书籍还是大学课程,都有点脱离工作.特别地,计算机基础知识体系庞杂,想要从零学习或者复习都耗时耗力. 有鉴于此,本系列文章将带你更快的补足编程必备基础知识,涵盖计算机领域三大基础知识:计算机组成原理.操作系统.计算机网络,这些都是大学计算机课程里面最重要的内容.文章对这些内容做了提炼和

JS基础知识回顾:变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象. 引用类型的值是保存在内存中的对象,与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间. 在操作对象时,实际上是在操作对象的引用而不是实际的对象. 在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型的,ECMAScript放弃了这一传统. 定义基本类型值和引用类型值的方式是类似的:创建