精华内容
下载资源
问答
  • 对函数变量的访问形式
    千次阅读
    2019-01-02 14:35:10

    模块模式利用了函数作用域和闭包来创建被绑定对象与私有成员变量的关联,只有特权函数才能够访问特定的私有成员变量(数据对象)。

    模块模式(摈弃全局变量的使用,封装程序)的一般形式是:

    一个定义了私有变量和函数的函数;

    利用闭包创建可以访问私有变量和函数的特权函数;

    最后返回这个特权函数,或者把它们保存到一个可以访问到的地方。

     

    //糟糕得例子——预期点击一个节点时应输出节点的序号,但是这个总是会显示节点的数目(因为事件处理器函数绑定了变量i本身,而不是函数在构造时的变量i的值)

    var   add_the_handlers = function(nodes){

        var   i;

        for(i=0;i<nodes.length;i++){

             nodes[i].onclick = function(e){   console.log(i);   }

        }

    }

    //先在循环外创建个辅助函数,这个辅助函数再返回一个绑定了当前i值的函数

    var   add_the_handlers = function(nodes){

         var  helper = function(i){

                return  function(e){   console.log(I);   }

         }

          var  i;

          for(i=0;i<nodes.length;i++){

                 nodes[i].onclick = helper(i);

          }

    };

    更多相关内容
  • 1.静态变量空间分配问题 #include<iostream> using namespace std; class Person{ public: static int hand; static void hitPeople(); }; int main() { cout<<'1'<<endl; } 结果: #...

    关键在于是否给函数分配好空间了,以及是否给变量分配好空间了,分配了空间就可以用,没有分配空间就不可以用,static不管函数还是变量,不管属于类还是在类外,都是直接分配空间的,而类内的方法,和成员变量则没有分配,而类外的函数和变量是直接分配了空间的,所以可以直接用。
    1.静态变量空间分配问题

    #include<iostream>
    using namespace std;
    class Person{
        public:
            static int hand;
            static void hitPeople();
    };
    int main()
    {
        cout<<'1'<<endl;
    }
    
    

    结果:
    在这里插入图片描述

    #include<iostream>
    using namespace std;
    class Person{
        public:
            static int hand = 0;
            static void hitPeople();
    };
    int main()
    {
        cout<<'1'<<endl;
    }
    

    结果:报错

    #include<iostream>
    using namespace std;
    class Person{
        public:
            static int hand;
            static void hitPeople();
    };
    int Person::hand;
    int main()
    {
        cout<<'1'<<endl;
    }
    
    

    结果:
    在这里插入图片描述

    #include<iostream>
    using namespace std;
    class Person{
        public:
            int hand = 0;
            static void hitPeople();
    };
    int main()
    {
        cout<<'1'<<endl;
    }
    

    结果:
    在这里插入图片描述
    原因:静态变量只能在类外进行分配空间,原因是如果在类内就进行了分配空间,实例化对象时候,就会多次分配内存,没有起到静态变量的作用,因此,c++在设计时,设计不在类外分配空间就不通过。所以静态变量是需要在类内声明,类外定义的。而静态函数则在类内直接定义也可以,因为不需要分配空间。
    2.静态函数可以直接访问静态变量,静态函数不可以直接访问非静态变量,但可以通过将类实例化为对象之后,静态函数去访问对象的非static成员变量。
    普通的成员函数通过实例化类调用普通变量

    #include<iostream>
    using namespace std;
    class Person{
        public:
            int hand = 1;
            void hitPeople()
            {
                cout<<hand<<endl;
            }
    };
    int main()
    {
        cout<<"类的大小为:"<<sizeof(Person)<<endl;
        Person person1;
        person1.hitPeople();
    }
    
    

    结果:
    在这里插入图片描述
    普通的成员函数通过实例化类调用静态变量

    #include<iostream>
    using namespace std;
    class Person{
        public:
            static int hand;
            void hitPeople()
            {
                cout<<hand<<endl;
            }
    };
    int Person::hand = 1;
    int main()
    {
        cout<<"类的大小为:"<<sizeof(Person)<<endl;
        Person person1;
        person1.hitPeople();
    }
    

    结果:
    在这里插入图片描述
    静态函数可以直接访问静态变量:

    #include<iostream>
    using namespace std;
    class Person{
        public:
            static int hand;
            static void hitPeople()
            {
                cout<<hand<<endl;
            }
    };
    int Person::hand = 1;
    int main()
    {
        cout<<"类的大小为:"<<sizeof(Person)<<endl;
        Person::hitPeople();
    }
    
    

    结果:
    在这里插入图片描述
    静态函数不可以直接访问非静态变量:

    #include<iostream>
    using namespace std;
    class Person{
        public:
            int hand = 1;
            static void hitPeople()
            {
                cout<<hand<<endl;
            }
    };
    //int Person::hand
    int main()
    {
        cout<<"类的大小为:"<<sizeof(Person)<<endl;
        Person person1;
        person1.hitPeople();
    }
    

    结果:报错
    在这里插入图片描述
    静态函数可以访问类实例化后对象的非静态变量
    #include
    using namespace std;
    class Person{
    public:
    int hand = 1;
    static void hitPeople(int a)
    {
    cout<<a<<endl;
    }
    };
    //int Person::hand
    int main()
    {
    cout<<“类的大小为:”<<sizeof(Person)<<endl;
    Person person1;
    Person::hitPeople(person1.hand);
    }
    在这里插入图片描述
    归咎根本原因是因为,static函数和普通函数不同,因为它不属于任何一个对象,没有this指针,this的含义是某一个对象的起始地址,该对象的其它成员通过和this的相对地址找到,静态函数只有一个地址,当对象>=2时,无法通过对象的相对地址寻找(不知道以哪个对象为起始地址),所以静态函数是没有this指针的,无法直接的通过this指针去访问普通的成员变量,只能通过传参的形式,而静态成员函数在访问静态变量时由于即使没有this指针,也能确定就是这个静态变量,不管是哪个对象,都只有这一个名字的静态变量,也就不需要this指针,就可以直接调用这个确定的成员变量。

    展开全文
  • #include<iostream> using namespace std; class person {public: static void func() ...//注意静态变量一定是在类内申明, //在类外初始化的,并且在初始化的时候一定要加作用域!!!!! void test01() {
    #include<iostream>
    using namespace std;
    class person
    {public:
    	static void func()
    	{
    		cout << "func的调用" << endl;
    	}
    	static int m_a;
    	int m_b = 30;
    }; int person::m_a = 10;//注意静态变量一定是在类内申明,
    //在类外初始化的,并且在初始化的时候一定要加作用域!!!!!
    void test01()
    {//通过对象来访问函数
    	person p;
    	p.func();
    	//通过类名的方式来访问函数
    	//通过类名后面加两个冒号就可以访问
    	person::func();
    	//通过对象来访问变量
    	person p1;
    	cout << p1.m_a << endl;
    	//通过类名来访问变量
    	cout << person::m_a<<endl;
    	//cout << person::m_b << endl;//错的
    	//因为通过类名不可以访问非静态变量,只有静态变量才可以
    	//因为静态变量和静态的成员函数都共享那一个类,
    	//所以可以通过类名的方式来访问这个变量
    	//总结:
    	//只有静态函数(变量)的访问才可以用两种形式
    	//对于普通的函数或者是变量是只有通过对象来访问 的
    }
    int main(void)
    {
    	test01();
    	system("pause");
    	//	system("PAUSE");和system("pause");作用和效果一样,因为dos命令是不区分大小写的。
    	//system("PAUSE")  是暂停的意思,等待用户信号;不然控制台程序会一闪即过,你来不及看到执行结果。*/
    	//	return 0;//程序运行成功会返回一个0
    }
    
    
    展开全文
  • 1、类变量、实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量。通常不使用self.变量名赋值的变量。类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用...实例变量形式访问
  • 变量提升与函数提升

    千次阅读 2021-06-02 08:16:29
    通过var定义(声明)的变量,在定义语句之前就可以访问到; 值:undefined; console.log(a); //undefined var a = 1;   因为有变量提升的缘故,上面代码实际的执行顺序为: var a; console.log(a); a = 1;...

    一、变量提升

      变量提升即将变量声明提升到它所在作用域的最开始的部分。

    • 通过var定义(声明)的变量,在定义语句之前就可以访问到;
    • 值:undefined;
    	console.log(a); //undefined
    	var a = 1;
    

      因为有变量提升的缘故,上面代码实际的执行顺序为:

    	var a;
    	console.log(a);
    	a = 1;
    

    二、函数提升

      js中创建函数有两种方式:函数声明式和函数表达式
      1、函数声明提升

    	function fun() {
    	    console.log('函数声明式');
    	}
    

      js在执行之前,会把foo函数提升到最前面,所以我们在fun函数定义之前就可以使用fun函数。
      举个栗子来说明下:

    	fun();
    	function fun(){
    		console.log("aa");
    	}
    

      打印结果为aa;说明以函数声明来定义函数时,可以在定义函数之前访问到定义的函数。

      2、函数表达式提升

    	var fun = function() {
    	    console.log('函数表达式');
    	};
    

      此种声明方式我们可以理解为一个普通变量的提升,在js代码执行之前会把fun提升带最前面,在函数赋值之前,fun是undefined,如果调用fun(),将会报错

      再举个栗子来理解下:

    	fun();
    	var fun = function (){
    	    console.log("aa");
    	}
    

      此时打印的结果为报错Uncaught TypeError: fun is not a function,因为在js代码执行之前,会把fun提升到最前面,值为undefined,不是一个函数,以函数的形式来进行调用时将会报错。

    三、面试题

      把上面这些基本知识理清楚后,在看几道面试题,检测是否真的学明白了。

      1、第一题

      var a = 4
      function fn () {
        console.log(a)
        var a = 5
      }
      fn()
    

      输出结果:undefined
      说明: 在上面这段代码中有两个作用域,window全局作用域fn函数作用域,在打印变量a时,会先在fn函数作用域里面查找,因为在执行fn函数时,在函数内部也会先进行变量提升,所以最终的打印结果为undefined
    代码实际的执行顺序为:

      var a = 4
      function fn () {
        var a;
        console.log(a); //undefined
        a = 5
      }
      fn()
    

      2、第二题

      function a() {}
      var a;
      console.log(typeof a)
    

      输出结果:function

      function a() {}
      var a = 1;
      console.log(typeof a)
    

      输出结果:number
      说明:函数提升优先级高于变量提升,且不会被同名变量声明时覆盖,但是会被同名变量赋值后覆盖。

      3、第三题

      console.log(typeof a)
      function a() {}
      var a = 1;
    

      输出结果:function
      说明: 函数提升的优先级高于变量提升。

      4、第四题
      大家可以看下这个例子最后的输出结果,检测下自己理解的如何。至于打印输出的结果我就不透露了,大家可以在控制台打印输出下,看看是否和自己预想的一样。

      console.log(v1);
      var v1 = 100;
      function foo() {
        console.log(v1);
        var v1 = 200;
        console.log(v1);
      }
      foo();
      console.log(v1);
    

    以上就是我对变量提升与函数提升的个人理解,如有不足,欢迎指正!
    本文链接:https://blog.csdn.net/qq_43692768/article/details/117458927

    展开全文
  • 1、函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。Shell 函数定义的语法格式如下: [function] funname [()]{ 函数体 [return int;] } 格式1: 简化写法,不写 function 关键字: ...
  • 局部变量(内部变量):在定义它的函数内有效,但是函数返回后失效; 全局变量(外部变量):在所有源文件内均有效。在同源文件的函数中使用使用全局变量,需要将全局变量提前声明;同时在不包含全局变量定义的不...
  • c++ 静态成员函数用static 关键字来声明,用于处理静态成员变量,可以用类名来调用,也可以用对象名来调用。 测试代码: #include <iostream> using namespace std; class Point{ public: Po...
  • 全局变量,局部变量形式参数

    千次阅读 2016-03-20 02:07:36
    全局变量:全局变量在整个程序内都是可知的,因此可以被任何代码段所使用,他们在程序中执行时保持他们的值,可以再任何函数之外来创建他们,任何表达式都可访问他们。 全局变量存储在一个固定的存储区,这时由...
  • js中变量名与函数名重名的问题

    千次阅读 2019-08-22 20:49:51
    因为既然a=10这个值10赋值给了函数对象a,那么在全局环境下运行console.log(a),访问的是全局变量a,而全局变量a在系统内存中查找的值为1,所以打印的值为1. 那么同学们可以自行将函数b中的函数a给注释掉,看看...
  • 形参,顾名思义,形式上的参数,在定义函数函数名后面括号里面的变量名称就是形参;而实参就是平常定义的变量;如void swap(int x,int y)和int a=10,b=50中x、y是形参,a、b是实参,实参在主函数调用时会放在括号...
  • 建立一个函数的M文件步骤:1,在命令窗口中输入edit,弹出一个函数编辑框用于你自定义一个函数2,函数的建立:格式为function空格f=myfun(x,y),这里f是你函数的输出,myfun是你这个函数函数文件名(这个名字你...
  • Python之函数变量

    千次阅读 2018-09-20 18:36:54
    任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性...
  •  (1)、超全局变量在脚本中,任何一个地方都能被访问使用,任意一层函数,任意一个角落;  (2)、超全局变量主要有$GLOBALS、$_GET、$_POST.......都是以数组的形式展现; $a = 23; $b = 55; ...
  • 函数 1.概念: 重复执行的代码块或者说函数是事件驱动的重复执行的代码块. 2.函数的定义: 语法结构:function 函数名称遵循命名规则(){ 函数体 } 例如: <!DOCTYPE html> <html> <head> ...
  • c++ static静态变量、静态函数

    千次阅读 2019-06-13 08:30:23
    static静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化; 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;始终驻留在全局数据区,直到程序...
  • 调用函数返回值值临时变量问题

    千次阅读 2018-09-26 00:15:16
    对于所调用的函数里面的临时变量,在函数调用过程中是被压到程序进程的栈中的,当函数退出时,临时变量出栈,即临时变量已经被销毁,临时变量占用的内存空间没有被清空,但是已经可以被分配给其他变量了,所以有可能...
  • 变量提升2. 函数提升3. 函数优先二、暂时性死区三、总结 通常在直觉上我们会认为代码执行时是从上到下按顺序执行的,但在 JavaScript 中(就同步代码而言),这并不完全正确。 小二,上栗子! 实例 1: a = 2; var ...
  • 举个例子f=@(x,y)(x.^2+y.^2)x=[1 2 3]y=[2 3 4]由热心网友...你好,首先MATLAB并不像C,C++那样需要先定义一个变量,MATLAB可以直接幅值变量。你可以写成x=[2 2 2];然后在g1的表达式中x1用x(1),x2用x(2),x3用x(3...
  • C语言中利用Swap函数交换变量a,b

    千次阅读 多人点赞 2020-10-21 17:43:00
    C语言中利用Swap函数交换变量a,b 常见错误写法 error1 void Sawp_error1(int a,int b) { int tmp; tmp=a; a=b; b=tmp; } int main() { int a=10; int b=20; Sawp_error1(a,b); printf("%d %d\n",a,b); ...
  • 当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有... 静态成员变量不能在类中初始化,实际上类的定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在类的构造...
  • C++静态成员变量与静态成员函数

    千次阅读 多人点赞 2019-05-26 20:06:48
    类的静态成员有两种:静态成员变量和静态成员函数,语法是在普通成员变量和成员函数前加static关键字。 0、定义 class CRectangle{ public: void show();//普通成员函数 static void printTotal();//静态成员...
  • 函数的代码和复用

    千次阅读 2021-09-09 14:47:22
    3.熟悉局部变量和全局变量 4.了解lambda匿名函数 函数的理解和定义 ​ ·函数是一段具有特定功能的、可重复的语句组 ​ ·函数是一种功能的抽象,一般函数表达特定功能 ​ ·函数定义时,所指定的参数是一种占位符...
  • js中的变量提升和函数提升

    万次阅读 多人点赞 2018-10-30 13:30:09
    console.log(a);...由于js自上而下逐行解释执行的,有人可能会认为第一行代码引用了一个没有声明的变量a,会抛出 ReferenceError 异常,而注掉第一行后,由于变量 a 在第二行log之前已经声明并赋值,打印结果...
  • 一、结构体作为函数参数、 二、结构体指针作为函数参数、 三、完整代码示例、
  • 数据交换在C语言中十分常见。...这种交换如果放在一个函数中没错,但如果将它们分别放在子函数和主函数中就会发生错误。 错误示例1: void Swap(int a,int b) { int tmp = a; a = b; b = tmp; } i
  • C++类静态成员与类静态成员函数    当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有...
  • 通过Swap函数交换两个变量的值

    千次阅读 2020-10-13 20:34:17
    定义一个整形变量tmp,p1=&a ,p2=&b,首先在tmp里存入a的值,然后将b的值赋给a,再将tmp里的值赋给。这样就完成了a与b两个数的交换。 我们经常会发现自己写出的程序并不能达到我们的要求,在写这类题的时候...
  • 静态变量http://www.cnblogs.com/dongzhiquan/archive/2009/07/21/1994792.html 一文静态变量进行了充分的阐述,现整理部分重要内容如下,加深印象。1、静态变量的存储方式和生命...2、静态局部变量:定义在函数体内

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 472,080
精华内容 188,832
热门标签
关键字:

对函数变量的访问形式