谈谈javascript的函数作用域】的更多相关文章

在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域.取而代之的javascript使用的是函数作用域(function scope):变量在声明它的函数体以及这个函数体嵌套的任意函数体内都是有定义的. 在如下代码中,在不同位置定义的i,j和k,他们再同一个作用域内都是有定义的 function text(o) { var i=0; alert(type…
在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于这类型的编程语言,javascript是没有块级作用域.取而代之的,javascript使用的是块级作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. 在如下的所示的代码中,在不同位置定义了变量 i . j 和 k ,它们都在同一个作用域内——这三个变量在函数体内均是有定义…
有过类似C语言编程经验的同学应该都知道“块级作用域(block scope)”:花括号内的每一段代码都具有各自的作用域,而且在声明它们的代码段之外是不可见的.而在JavaScript中是没有块级作用域的,JavaScript取而代之地使用了“函数作用域(function scope)”:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. 光用文字解释平白无味,先来段让你为之一振的代码: function myTest(num){ var i = 0; if(num == 222…
javascript不像java等其他强类型语句,没有块级作用域(括号内的代码都有自己的作用域,变量在声明它们的代码段之外不可见)一说,但有自己的独特地方,即函数作用域. 函数作用域:变量在声明它们的函数体内以及这个函数体的任意内部函数体内是有定义的. 如下所示代码,在不同位置定义了变量i.j和k,它们都在同一个作用域内,即在函数体内均是有定义的. function test(){ var i=0; //i在整个函数体内均有定义 if(true){ var j=0; //j在整个函数体内均有定义…
我们都知道定义函数的方式有两种,一种是函数声明,另外一种就是函数表达式. 函数声明 语法为:function关键字后跟函数名.例如: function functionName(arg0) { //函数体 } alert(functionName.name) // "functionName" 函数声明最主要的特征就是函数声明的提升,所以我们可以把函数声明放在调用它的语句的后面,因为执行代码前会先读取函数声明.比如: hello(); function hello(){ alert(&…
什么是作用域 ? 作用域:一个变量可以生效的范围. 变量不是在所有地方都可以使用的,而这个变量的使用范围就是我们要说的作用域. 注意:在JavaScript中,划分作用域也是用大括号划分的, 但是在 JS 之中能够有效限定作用域的大括号只有函数大括号! 有哪些作用域 ? - 全局作用域(不再任何函数内) 学习使用作用域,以下内容是所需要了解的: 全局作用域是最大的作用域 在全局作用域中定义的变量可以在任何地方使用 页面打开的时候,浏览器会自动给我们生成一个全局作用域 window 这个全局作用域…
变量作用域和函数作用域都涉及到变量值的变化,本文旨在让大家明白他们之间的区别 变量的作用域: 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1(){ console.log(n); } f1(); 另一方面,在函数外部自然无法读取函数内的局部变量. function f1(){ var n=999; } consolg.log(n); // error 这里有一个地方需要注意,函…
http://www.cnblogs.com/ArthurPatten/p/3274080.html 一些语言如C.java都有块级作用域,即花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的,但是javascript没有块级作用域.javascript使用函数作用域,即变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的,也即函数内声明的所有变量在函数体内始终是可见的.这样就意味着变量在声明之前就可以使用,这个特性被称为"声明提前",即ja…
一些语言如C.java都有块级作用域,即花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的,但是javascript没有块级作用域.javascript使用函数作用域,即变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的,也即函数内声明的所有变量在函数体内始终是可见的.这样就意味着变量在声明之前就可以使用,这个特性被称为"声明提前",即javascript函数里声明的所有变量都被提前至函数的顶部.来看个例子. var test1 = &qu…
<h4>3.函数作用域和声明提前</h4> <p> <!--<script type="text/javascript">--> <pre> (function test (o) { var i = 0; if (typeof o =="object") { var j = 0; for (var k =0;k<10;k++) { console.log(k); } console.log…
分析: 无论是强类型语言c#.c++.java等语言,还是弱类型语言如Javascript,所有变量可以抽象为两种类型,即局部变量和全局变量. 全局变量:整个作用域可见. 局部变量:局部可见,退出作用域,就被GC销毁,回收空间. Code分析: //局部变量 function PartVary() { var n = 10; //表示局部变量,外部不可访问 } PartVary(); alert(n);//error //全局变量 function AllVary() { n = 10 //表示…
一个变量的作用域(scope)是程序源代码中定义这个变量的区域.简单的说,作用域就是变量与函数的可访问范围.全局变量拥有全局作用域,在JavaScript代码中的任何地方都有定义.局部变量是在函数体内声明而且只作用在函数体内部以及该函数体的子函数的变量.下面我们对全局作用域和局部作用域来做一个深入的理解. 1.  全局作用域(Global Scope) 全部变量拥有全局作用域,在代码的任何地方都有定义,一般来说以下几种情形拥有全局作用域: (1)最外层函数和在最外层函数外面定义的变量拥有全局作用…
从事web开发工作,尤其主要是做服务器端开发的,难免会对客户端语言JavaScript一些概念有些似懂非懂的,甚至仅停留在实现功能的层面上,接下来的文章,是记录我对JavaScript的一些概念的理解.欢迎大牛拍砖吐糟. 变量作用域 在JavaScript中全局变量的作用域比较简单,它的作用域是全局的,在代码的任何地方都是有定义的.然而函数的参数和局部变量只在函数体内有定义.另外局部变量的优先级要高于同名的全局变量,也就是说当局部变量与全局变量重名时,局部变量会覆盖全局变量(如下面例子). va…
JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外一个函数作用域中变量的函数. 从概念上,闭包有两个特点: 1.函数 2.能访问另外一个函数的作用域中的变量 在ES6之前,JavaScript只有函数作用域的概念,没有块级作用域(但catch捕获的异常,只能在catch中访问)的概念.每个函数都是封闭的,外部访问不到函数作用域中的变量. function getName() { var name = "LHH"; console.log(name); //"…
JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕... 一.“JavaScript中无块级作用域” 在Java或C#中存在块级作用域,即:大括号也是一个作用域. public static void main () { if(1==1){ String name = "seven"; } System.out.println(name); } // 报错 public static void Main(…
最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数.本人把思路整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径,避免走弯路.内容有些多,但都是笔者对于函数的总结. 1.函数的定义 1.1:函数声明 1.2:函数表达式 1.3:命名函数的函数表达式 1.4:函数的重复声明 2.函数的部分属性和方法 2.1:name属性 2.2:length属性 2.3:toString()方法 3.函数作用域 3.1:全局作…
函数作用域和闭包  词法作用域   它们在定义它们的作用域里运行,而不是在执行的作用域运行,但是只有在运行时,作用域链中的属性才被 定义(调用对象),此时,可访问任何当前的绑定.   调用对象       当JavaScript解释器调用一个函数,它首先将作用域设置为定义函数时起作用的那个作用域链, 然后在作用域最前面加上一个新的对象(调用对象) 所以函数内定义的局部变量以及函数的参数,都添加到调用对象的属性上,这意味着,它们隐藏了作用域链上更上层的任何的同名的属性 (变量寻找路径)   作为闭…
  1 <!DOCTYPE html>   2 <html>   3 <script src="./jquery-1.7.2.js"></script>   4 <head>   5     <title></title>   6 </head>   7 <body>   8 <input type="text" name="type"…
在es6之前,JavaScript是没有块级作用域的,只有函数作用域,也就是说是一个function里面定义的变量外面取不到的:而if for是条件判断的语句,不是函数,由于缺少块级作用域,所以条件中的值是可以取到的. 下面声明一个局部变量,看看在外面能不能被获取到: function test(){ var local = 'local'; } test();//执行函数 console.log(local);//由于local是局部变量,函数作用域外不能取到,所以报错 局部变量在函数在外部是…
在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的. 例如 : message = "hello JavaScript ! " 即定义了一个全局变量message,并赋值 "Hello JavaScript!" --<JavaScript高级程序第三版> 如同往日一般,一群人在所谓的技术交流群里面相互斗图着.突然老王莫名的正经起来,在群里发了一道JavaScript的题目,让大家猜一猜这道题的答案.…
et和const在{}内声明都会变为外部不能访问的值,但是const声明的是常量,也不能修改 函数是 JavaScript 中最常见的作用域单元.本质上,声明在一个函数内部的变量或函数会在所处的作用域中“隐藏”起来,这是有意为之的良好软件的设计原则.但函数不是唯一的作用域单元.块作用域指的是变量和函数不仅可以属于所处的作用域,也可以属于某个代码块(通常指 { .. } 内部).从 ES3 开始, try/catch 结构在 catch 分句中具有块作用域.在 ES6 中引入了 let 关键字(…
在一些类C的编程语言中,花括号内的每一段代码都具有各自作用域,并且变量在声明他们的代码段之外是不可见的,这个概念叫做块级作用域. javascript中没有块级作用域的概念,有的是函数作用域的概念:变量在声明他们的函数体内部的任何位置(包括这个函数体嵌套的任何函数体内)都是可读取的. var k = "k"; if(1===1){ var j ="j"; for (var i = 0; i < 3; i++) { console.log(i); } conso…
1. 函数中的作用域 函数作用域的含义是指属于这个函数的全部变量都可以在整个函数范围内使用以及复用 2. 隐藏内部实现 函数经常使用于隐藏”内部实现”,可以把变量和函数包裹在一个函数的作用域中,然后用这个作用域来隐藏它们. 这种基于作用域的隐藏方法基于软件设计中的最小特权原则(最小授权/最小暴露原则),比如模块的API设计. 引申一下,如果变量和函数都放在全局作用域中,那么就会暴露过多的变量和函数,从而违背了最小特权原则,而这些变量本该是私有的,应该阻止外部访问的.额外的多余的访问权限可能被有意…
在ES6之前,javascript只有全局作用域和函数作用域.所谓作用域就是一个变量定义并能够被访问到的范围.也就是说如果一个变量定义在全局(window)上,那么在任何地方都能访问到这个变量,如果这个变量定义在函数内部,那么就只能在函数内部访问到这个变量. 全局作用域只要页面没关闭就会一直存在,而函数作用域只有在函数执行的时候才存在,执行完就销毁.且每次执行函数都会创建一个新的作用域. 那么什么是作用域链呢? 在了解作用域链之前,我们先了解一个执行期上下文的概念. 执行期上下文:当函数执行时,…
javascript 变量的作用域: 这是一个至关重要的问题.特别是当我们从别的语言转向javascript时,必须要明白一点,即在javascript中,变量的定义并不是以代码块作为作用域的,而是以函数作为作用域.也就是说变量是在某个函数中定义的,那么她在函数以外的地方是不可见的.而如果函数是定义在if或for这样的代买块中,那么她随处可见. 全局变量:是定义在所有函数只外的变量.相反局部变量则是定义在某个函数中.其中,函数内的代码可以像访问自己的局部变量一样访问全局变量,反之则不可以. ;…
在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的.例如 : message = "hello JavaScript ! " 即定义了一个全局变量message,并赋值 “Hello JavaScript!”--<JavaScript高级程序第三版> 如同往日一般,一群人在所谓的技术交流群里面相互斗图着.突然老王莫名的正经起来,在群里发了一道JavaScript的题目,让大家猜一猜这道题的答案. var foo = 1…
一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(function foo(){ console.log(bar); }); console.log(foo); 先说下结果为99和foo is not defined.在<你不知道的JavaScript>一书中有这么一句话:无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的…
1. 函数 1.1 定义函数 function add(x, y){ return x + y; } 上述函数定义如下: 关键字function指出这是一个函数定义: add是函数的名称: (x, y)括号内列出函数的参数,多个参数以,分隔: {}之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句. 函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回. 如果没有return语句,函数执行完毕后也会返回结果,只是结果为undefined. JavaScript…
函数中的作用域 所谓函数作用域,就是属于这个函数的全部变量都可以在整个函数的范围内使用及复用. function foo(a) { var b=a; function bar(c){ var c=b*2; console.log(c); } bar(); } foo(3); function foo(a) { var b=a; function bar(c){ var c=b*2; console.log(c); } bar(); } bar(2); //not defined 命名冲突 在同一…
聊聊javascript中的函数 本文可作为李刚<疯狂htmlcssjavas讲义>的学习笔记 先说一个题外话 前几天在知乎上流传着一个对联  上联是雷锋推到雷峰塔 nnd 这是什么对联?!!! 下联是java implements javascript  笑而不语 呵呵 说的javascript的函数了 咱们就不妨先说说java里的方法 首先在java里函数(一般叫方法)是从属于类的 和容易理解 Person类有个方法叫walk() 但是在javas里面函数是"一等公民"…