560 likes | 821 Views
CS101 Introduction to Computing Lecture 29 Functions & Variable Scope (Web Development Lecture 10). During the last lecture we had a discussion on Arrays. We found out why we need arrays We became able to use arrays in conjunction with the ‘ for ’ loop for solving simple problems. Array.
E N D
CS101 Introduction to ComputingLecture 29Functions & Variable Scope(Web Development Lecture 10)
During the last lecture we had a discussion on Arrays • We found out why we need arrays • We became able to use arrays in conjunction with the ‘for’ loop for solving simple problems
Array An indexed list of elements A variable is a container that holds a value Similarly, an Array can be considered a container as well, but this one is more interesting as it can hold multiple values
Array fruit[ 0 ] Square bracket Index Identifier
Arrays in JavaScript • In JavaScript, arrays are implemented in the form of the ‘Array’ object • The key property of the ‘Array’ object is ‘length’, i.e the number of elements in an array • Two of the key ‘Array’ methods are: • reverse( ) • sort( ) • Elements of an array can be of any type; you can even have an array containing other arrays
Today’s Goal:Functions & Variable Scope • To be able to understand the concept of functions and their use for solving simple problems • To become familiar with some of JavaScript’s built-in functions • To become familiar with the concept of local and global variables
Function A group of statements that is put together (or defined) once and then can be used (by reference) repeatedly on a Web page Also known as subprogram, procedure, subroutine
From the last lecture … words = new Array ( 10 ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { words[ k ] = window.prompt( "Enter word # "+ k,"") ; } document.write( "UNSORTED WORDS:" + "<BR>" ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { document.write( words[ k ] + "<BR>") ; } words.sort( ) ; document.write( "SORTED WORDS:" + "<BR>" ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { document.write( words[ k ] + "<BR>") ; }
words = new Array ( 10 ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { words[ k ] = window.prompt( "Enter word # " + k, "" ) ; } document.write( "UNSORTED WORDS:" + "<BR>" ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { document.write( words[ k ] + "<BR>") ; } words.sort( ) ; document.write( "SORTED WORDS:" + "<BR>" ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { document.write( words[ k ] + "<BR>") ; }
The function is called here and in the next box The function is defined here function writeList( heading, words ) { document.write( heading + "<BR>" ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { document.write( words[ k ] + "<BR>") ; } } words = new Array ( 10 ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { words[ k ] = window.prompt( "Enter word # "+ k,"") ; } writeList( “Unsorted Words:”, words ) ; words.sort( ) ; writeList( “Sorted List:”, words ) ;
Advantages of Functions • Number of lines of code is reduced • Code becomes easier to read & understand • Code becomes easier to maintain as changes need to be made only at a single location instead multiple locations
function writeList( heading, words ) { document.write( heading + "<BR>" ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { document.write( words[ k ] + "<BR>") ; } } words = new Array ( 10 ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { words[ k ] = window.prompt( "Enter word # "+ k,"") ; } writeList( “Unsorted Words:”, words ) ; words.sort( ) ; writeList( “Sorted List:”, words ) ; Let’s us see if we can redouble the advantage
function writeList( heading, words ) { document.write( heading + "<BR>" ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { document.write( words[ k ] + "<BR>") ; } } words = new Array ( 10 ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { words[ k ] = window.prompt( "Enter word # "+ k,"") ; } writeList( “Unsorted Words:”, words ) ; words.sort( ) ; writeList( “Sorted List:”, words ) ; words.reverse( ) ; writeList( “Reverse-Sorted List:”, words ) ;
Keyword Pair of parenthesis Function definition enclosed in a pair of curly braces Function identifier Function ‘arguments’ separated by commas function writeList( heading, words ) { document.write( heading + "<BR>" ) ; for ( k = 0 ; k < words.length ; k = k + 1 ) { document.write( words[ k ] + "<BR>") ; } }
Function Identifiers The naming rules for function identifiers are the same as were discussed for variable and array identifiers
Arguments of a Function • A comma-separated list of data • Arguments define the interface between the function and the rest of the Web page • Arguments values are passed to the function by value (some popular languages pass arguments ‘by reference’ as well)
To ensure that a function is defined before it is called up, define all functions in the HEAD portion of Web pages
Two Ways of Calling Functions function popUp( message ) { window.alert( message ) ; } popUp( “Warning!”) ; A function call appearing as a complete statement function add( a, b ) { c = a + b ; return c ; } sum = add( 2, 4 ) ; document.write( sum ) ; A function call appearing as part of a statement. Definitions of such functions include a ‘return’ statement
function popUp( message ) { window.alert( message ) ; } popUp(“Warning!”) ; What will get written by this statement? function popUp( message ) { window.alert( message ) ; } a = popUp(“Warning!”) ; document.write( a ) ; undefined
function add( a, b ) { c = a + b ; return c ; } sum = add( 2, 4 ) ; document.write( sum ) ; What would this statement do? What would this modifica-tion do? function add( a, b ) { c = a + b ; return c ; } add( 2, 4 ) ; function add( a, b ) { c = a + b ; return c ; } document.write(add(2,4));
Another Example 5! = 120 function factorial( n ) { product = 1 ; for ( k = 1 ; k <= n ; k = k + 1 ) { product = product * k } return product ; } n = window.prompt( "Enter a number ","") ; document.write(n, "! = ", factorial( n ) ) ; 0! = ?
What Would this Statement Do? factorial( factorial ( 3 ) ) ; This is termed as the recursive use of a function
Methods • Methods are functions • They are unusual in the sense that they are stored as properties of objects
Object:A named collection of properties (data, state) & methods (instructions, behavior) A collection of properties & methods All objects have the “name” property: it holds the name of the object (collection) name method 2 prop1 prop 3 prop 5 prop 2 method 3 method 1 prop 4
Object:A named collection of properties A collection of properties All objects have the “name” property: it holds the name of the object (collection) name prop 8 prop1 prop 3 prop 5 prop 2 prop 7 prop 6 prop 4
Event Handlers • Special-purpose functions that come predefined with JavaScript • They are unusual in the sense that they are many times called in the HTML part of a Web page and not the <SCRIPT>…</SCRIPT> part • More on event handlers in a future lecture
Predefined, Top-Level or Built-In Functions The dictionary meaning of ‘Parse’: To breakdown into simpler components and analyze • Event handlers are not the only functions that come predefined with JavaScript. There are many others. • Practically, there is no difference between predefined functions and those that are defined by the programmer (termed as user-defined or custom functions) • There are many of them, but here we discuss only two: parseInt( ), parseFloat( )
parseInt( ) Syntax: parseInt ( string ) string1 =“3.14159” ; document.write( parseInt( string1 )) ; document.write( “<BR>” ) ; string2 =“$100.00” ; document.write( parseInt( string2 ) ) ; document.write( “<BR>” ) ; string3 =“ 23 ” ; document.write( parseInt( string3 )) ; 3 NaN 23
parseInt( ) • Parses the string argument; returns an integer • If itencounters a non-numeral - anything other than (+,-) or (0-9) - it ignores it and all succeeding characters, and returns the integer value parsed up to that point
parseInt( ) • If the first character cannot be converted to a number, parseInt returns NaN • parseInttruncates numbers to integer values • Leading and trailing spaces are ignored
parseFloat( ) Syntax: parseFloat ( string ) string1 =“3.14159” ; document.write( parseFloat( string1 )) ; document.write( “<BR>” ) ; string2 =“$100.00” ; document.write( parseFloat( string2 ) ) ; document.write( “<BR>” ) ; string3 =“ 23E-15 ” ; document.write( parseFloat( string3 )) ; 3.14159 NaN 2.3E-14
parseFloat( ) • Parses the string argument; returns a FP number • If it encounters a character other than • A sign (+,-) • A numeral (0-9) • A decimal point • An exponent it returns the value up to that point, ignoring that and all succeeding characters
parseFloat( ) • If the first character cannot be converted to a number, parseFloat returns NaN • Leading and trailing spaces are ignored
Scope of Variable Defining the space in which a variable is effective is known as defining the scope of a variable A variable can be either localorglobal in scope
Local and Global Variables Local or Function-level Variable Effective only in the function in which they are declared Global Variables Visible everywhere on the Web page
Example function factorial( n ) { product = 1 ; for ( k = 1 ; k <= n ; k = k + 1 ) { product = product * k } return product ; } n = window.prompt( "Enter a number ","") ; document.write( “k = ”, k ) ; document.write( “<BR>” ) ; document.write(n, "! = ", factorial( n ) ) ; What would this statement write?
function factorial( n ) { product = 1 ; for ( k = 1 ; k <= n ; k = k + 1 ) { product = product * k } return product ; } n = window.prompt( "Enter a number ","") ; document.write( “k = ”, k ) ; document.write( “<BR>” ) ; document.write(n, "! = ", factorial( n ) ) ; Why does JavaScript think that ‘k’ is not defined?
10! = 3628800 k = 11 function factorial( n ) { product = 1 ; for ( k = 1 ; k <= n ; k = k + 1 ) { product = product * k } return product ; } n = window.prompt( "Enter a number ","") ; document.write(n, "! = ", factorial( n ) ) ; document.write( “<BR>” ) ; document.write( “k = ”, k ) ;
function factorial( n ) { var k ; product = 1 ; for ( k = 1 ; k <= n ; k = k + 1 ) { product = product * k } return product ; } n = window.prompt( "Enter a number ","") ; document.write(n, "! = ", factorial( n ) ) ; document.write( “<BR>” ) ; document.write( “k = ”, k ) ;
‘k’ is a Local Variable • ‘k’ is not declared or used in the main code • Instead, it is declared within the function ‘factorial’ only • ‘k’ is local to the ‘factorial’ function, and does not hold any meaning outside that function
Here ‘product’ has been made a local variable as well function factorial( n ) { var k, product ; product = 1 ; for ( k = 1 ; k <= n ; k = k + 1 ) { product = product * k } return product ; } n = window.prompt( "Enter a number ","") ; document.write(n, "! = ", factorial( n ) ) ; document.write( “<BR>” ) ; document.write( product ) ; What would this statement write?
Local Variables • Declaring variables (using the var keyword) within a function, makes them local • They are available only within the function and hold no meaning outside of it
Global Variables • All other variables used in a Web page (or window) are global • They can be manipulated from the main code as well as from any of the functions • They include: • All variables declared in the main code • All variables used but not declared in the main code • All variables used but not declared in any of the functions defined on the Web page (or window)
var u ; document.write( m ) ; var a, b ; p = q + 2 ; r = s ; var c, d ; x = y * y ; Variables declared within functions are local; all others global