私有作用域的初级理解

1.全局变量:全局作用域下声明(预解释)的变量是全局变量
2.私有变量:私有作用域下,函数的形参和声明的变量
3.作用域链:在私有作用域下,执行代码的时候遇到变量,是私有变量则取私有变量,否则往上一级作用域查找直到找到
4.函数每次执行的时候,会形成一个新的私有作用域,然后按照如下步骤进行:
  a.如果有形参先给形参赋值
  b.进行当前私有作用域的预解释
  c.当前作用域的代码从上到下执行
5.闭包:函数执行形成新的私有作用域,里面的私有变量只在里面有效,与外面的毫无关系

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <p>
        模拟浏览器:
            1.进去全局作用域,开始预解释,
            var varible,
            fn="function fn(varible){
                console.log(varible);
              var varible = "私有";
              console.log(varible);
                }"
         预解释完毕
         2.开始执行
         全局作用域:
             varible="全局"
             打印varible("全局")
         函数执行创建新的私有作用域:
             形参:varible="参数";
             预解释: varible已经声明了不再声明,预解释完毕
             开始执行: 打印varible("参数"),varible="私有" 重新赋值,打印varible("私有") 执行完毕

    </p>
    <script>
        var varible = "全局";
        function fn(varible){
            console.log(varible);
          var varible = "私有";
          console.log(varible);
        }
        console.log(varible);
        fn("参数")

    </script>
</body>
</html>

点击查看详情

时间: 2024-10-12 22:19:47

私有作用域的初级理解的相关文章

js私有作用域(function(){})(); 模仿块级作用域

摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html js没有块级作用域,简单的例子: for(var i=0;i<10;i++){ alert(i); } alert(i); for循环后的i,在其它语言像c.Java中,会在for结束后被销毁,但js在后续的操作中仍然能访问到i值,即for循环后的alert(i);会弹出数值i=10; js模仿块级作用域: (function(){

[C++参考]私有成员变量的理解

私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外公开,不能在对象外部访问对象的私有成员变量. 然而,在实现拷贝构造函数和赋值符函数时,在函数里利用对象直接访问了私有成员变量,因而,产生了困惑.下面以具体实例进行说明: 疑惑:为什么第26行和第32行代码可以编译通过,而第39行和第40行代码会产生编译错误? class CTest { public: CTest(int i); CTest(const CTest& rhs); CTest& opera

【C++】 私有成员变量的理解

私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外公开,不能在对象外部访问对象的私有成员变量. 然而,在实现拷贝构造函数和赋值符函数时,在函数里利用对象直接访问了私有成员变量,因而,产生了困惑.下面以具体实例进行说明: 疑惑:为什么第26行和第32行代码可以编译通过,而第39行和第40行代码会产生编译错误? 1 class CTest { 2 public: 3 CTest(int i); 4 CTest(const CTest& rhs); 5 CTest

JS高级程序设计中对“私有作用域”的经典解释

JavaScript从来不会告诉你是否多次声明了同一个变量:遇到这种情况,它只会对后续的声明视而不 见(不过,它会执行后续声明中的变量初始化). 匿名函数可以用来模仿块级作用域并避免这个问题. 用作块级作用域(通常称为私有作用域)的匿名函数的语法如下所示. (function(){ //这里是块级作用域 })(); 以上代码定义并立即调用了一个匿名函数. 将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式.而紧随其后的另一对圆括号会立即调用这个函数. 如果有读者感觉这种语法不太好理解,

作用域+闭包+this理解

函数预解析过程   函数会覆盖同名变量 也就是var  他的优先级高   如果是同名函数则后者覆盖前者   逐行解读代码的时候 表达式 和参数 会改变预解析仓库里面的值..也就是表达式能干掉函数   域和域之间的关系 <script>标签存在上下文关系   走完上下文标签的变量  下面的可以用上面的   自上而下  函数  json等 子级作用域到父级作用域的过程 叫作用域链        由里到外 当子级找不到变量 会到父级找  如果有表达式的话就会更改全局变量 也就是函数里面没有var  

javascript在私有作用域中定义私有变量和私有函数 (1)

javascript没有私有成员,但是有私有变量,所有对戏那个属性都是公有的 任何在函数中定义的变量,都可以认为是私有变量,因为函数内部不能访问. 私有变量包括:函数的参数.局部变量.函数内部定义的其他函数 - 在私有作用域中定义私有变量和私有函数 function MyObject(){ //私有变量和私有函数 var privateVariable=10; function privateFunction(params) { return false } //特权方法----有权访问私有变量

预解释的初级理解

1.当浏览器加载html页面的时候,提供一个全局js代码执行的环境,即全局作用域 2.预解释:在当前作用域中,js代码执行之前浏览器会首先把var定义,把function定义且赋值(遇到function开一个内存空间地址,里面存函数内容的字符串) 3.预解释只发生在当前作用域,,如开始在window下预解释 函数执行的时候才会对函数中预解释因为作用域变了 4.js中内存的分类:栈内存和堆内存,栈内存用来提供js执行的环境(全局作用域 私有作用域),堆内存是存储引用数据类型的值(对象的键值对,函数

JavaSript中变量的作用域 闭包的理解

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> /* * 1.js中的变量都是公用的. 2.js中没有静态变量 3.闭包:函数内部可以调用函数外部的变量;反之,则不行 */ var r=10; fu

[js]js栈内存的全局/私有作用域,代码预解释

js代码如何执行的 浏览器提供执行环境: 全局作用域(提供js执行环境, 栈内存) --> 执行js需要预解释 - 带var : 提前声明 - 带function关键字的: 提前声明+定义 js中的栈内存(对应全局/私有作用域)和堆内存 <script> // 基本: num str boollen null undefied // 引用: [] {} \^$\ Date var num = 12; var obj = {name: "maotai", age: 22